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

Java 在war文件中查找独立部署或在ear中部署的资源(.txt文件),java,classloader,war,Java,Classloader,War,我有一个war文件打包在ear中并部署。结构如下: 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"); 及 通过附加调试器,我尝试了几

我有一个war文件打包在ear中并部署。结构如下:

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");

通过附加调试器,我尝试了几种路径,如“./input.txt”或“/input.txt”或仅仅是“input.txt”。但每次返回值为NULL时(意味着它无法找到文件)


在war中,无论war是独立部署还是打包在ear中,访问该文件的正确方法是什么?请提供帮助。

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

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

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

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

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

没有任何方法可以加载不在类路径上的资源吗?不能使用
getResource()
。它不能在类路径上有什么原因吗?没有什么大的原因。这场战争已经打包并与客户一起进行。我想不改变现有的war结构。将其保留在类路径上比创建奇怪的黑客来访问该文件要简单得多。我可以在WEB-INF/classes/中的.war文件中找到我的txt文件,但我无法读取它返回空指针,知道如何指定路径吗?
    request.getServletContext().getResourceAsStream("/input.txt");