我有一个war文件打包在耳中并部署。结构如下:
EAR
-WAR
--input.txt
--META-INF
--WEB-INF
---classes
(and so on)
我正在尝试从WEB-INF / classes文件夹中的一个类(比如abc.xyz.Myclass)读取 input.txt 。这是我试过的:
this.getClass().getClassLoader().getResourceAsStream("../../input.txt");
和
Thread.currentThread().getContextClassLoader().getResourceAsStream("../../input.txt");
我通过附加调试器尝试了几个路径,如“../input.txt”或“/input.txt”或只是“input.txt”。但每次我得到NULL作为返回值(意味着它无法找到文件)。
在战争中访问该文件的正确方法是什么,无论战争是单独部署还是打包在耳中?请帮忙。
答案 0 :(得分:5)
使用getResource()
时,资源需要位于类路径上。因此,您需要将input.txt
放在classes
目录下的某个位置。
答案 1 :(得分:3)
这是因为input.txt
在类路径之外,其中一个通常是WEB-INF/classes/
,并且您无法使用类加载器访问位于类路径之外的资源。
或者,如果代码可以访问HttpServletRequest
对象:
request.getServletContext().getResourceAsStream("/input.txt");
当然还有其他方法可以获取ServletContext
实例。