如何在类路径中找到.jar中的资源?

bra*_*ter 8 java resources classpath classloader

如果我在类路径的目录中有一组资源文件,我可以使用它来枚举它们ClassLoader.getResources(location).

例如,如果我/mydir/myresource.properties在类路径上,我可以调用类加载器getResources("mydir")并获取包含的URL的枚举myresource.properties.

当我将完全相同的资源打包到.jar中时,在进行调用时,我在URL的枚举中没有得到任何内容.我只用一个包含那些文件夹的jar替换了文件夹结构(它是一个webapp,所以jar进入/WEB-INF/lib).我还有一些其他的电话getResourceAsStream(location)用于通过名字单独获取其他资源,他们都工作正常.

当资源在.jar中时,枚举资源有什么不同?


更新 - 我复制了(ish)容器外的行为.以下代码段的结果在dirProperties设定为在包装中的资源名称具有对象键,但如果包是在一个.jar抛出Properties.load(InputStream的)方法中一个NullPointerException.

Properties dirProperties = new Properties();
dirProperties.load(this.getClass().getClassLoader().getResourceAsStream(location));
Run Code Online (Sandbox Code Playgroud)

容器上的相同代码(Tomcat 5.5)不会抛出异常,但是当文件位于.jar中时会生成一个空的Properties对象.

Sch*_*jer -1

this.getClass ().getClassLoader ().getResourceAsStream(location);
Run Code Online (Sandbox Code Playgroud)