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));
容器上的相同代码(Tomcat 5.5)不会抛出异常,但是当文件位于.jar中时会生成一个空的Properties对象.
Sch*_*jer -1
this.getClass ().getClassLoader ().getResourceAsStream(location);