在 war 文件中查找独立部署或 ear 部署的资源(.txt文件)



我有一个战争文件被打包在耳朵里并部署。结构如下:

EAR
-WAR
--input.txt
--META-INF
--WEB-INF
---classes
(and so on)

我正在尝试从 WEB-INF/classes 文件夹中的一个类(比如 abc.xyz.Myclass)读取输入.txt。这是我尝试过的:

this.getClass().getClassLoader().getResourceAsStream("../../input.txt");

Thread.currentThread().getContextClassLoader().getResourceAsStream("../../input.txt");

我尝试了几种路径,例如"../input.txt"或"/input.txt"或只是"input.txt"通过附加调试器。但是每次我得到 NULL 作为返回值(意味着它找不到文件)。

在战争中访问该文件的正确方法是什么,无论战争是独立部署还是包装在耳朵里?请帮忙。

使用 getResource() 时,资源需要位于类路径上。因此,您需要将input.txt放在classes目录下的某个位置。

这是因为input.txt 位于类路径之外,其中一个类路径通常是 WEB-INF/classes/ ,并且您无法使用类装入器访问位于类路径外部的资源。

或者,如果代码可以访问 HttpServletRequest 对象:

    request.getServletContext().getResourceAsStream("/input.txt");

当然,还有其他方法可以获取ServletContext实例。

最新更新