在Java中,是否可以使用资源路径获取WAR类路径内的目录文件列表?

3

我有一个文件列表在类路径上的目录中,我需要读取它们,而且更喜欢使用File API,但是看起来我无法在档案内这样做。在我的本地环境单元测试中,这可以正常工作,但当我将其部署为WAR包放在EAR包中时,文件列表返回null:

File dir = new File(getClass().getClassLoader().getResource("mydir").getPath());
File[] files = dir.listFiles();

我该如何从输入流中获取文件列表?我不知道它们的名称,这就是为什么我需要实际 File 对象的列表。 - user4903
2个回答

2
当war文件未解压缩时,您无法使用File API,但可以使用Servlet API。
ServletContext的getResourcePaths方法可用于检索“目录”的所有成员,然后使用getResourcegetResourceAsStream来检索目录中文件的内容。
for (String s : context.getResourcePaths("foo")) {
    InputStream contents = context.getResourceAsStream(s);
    //do something with the contents
}

我认为这可能是情况。如果有的话,您知道在Java文档中哪里说明了这一点吗(关于未打包的WAR文件列表)? - user4903
据我所知,JavaDoc 中没有明确说明这一点。这是因为 Servlet 引擎没有义务将 WAR 文件的内容放置在文件系统中。虽然 Servlet JSR 中提到了这一点,但我无法给您提供 JavaDoc 中的具体引用 - 并非所有内容都在 JavaDoc 中。 - Sean Reilly

0

@Puce:当包含war的ear未解压缩时,您如何获取jar文件的路径?以便以可移植的方式进行操作并不是很简单。即使可以这样做,我担心反复解压缩jar文件会影响性能。 - Sean Reilly
@SeanReilly 最近,我已经向SoftSmithy实用程序库添加了一个实用方法来获取类的jar文件,但我还没有发布它。您可以在此处找到代码(许可证:CDDL):http://softsmithy.hg.sourceforge.net/hgweb/softsmithy/lib/main-golden/file/058faa0f7621/lib-core/src/main/java/org/softsmithy/lib/nio/file/JarFiles.java 关于性能:如果有问题,您将不得不对其进行分析。 - Puce
@Sean Reilly:当您拥有指向其中资源的URL时,您不需要jar文件的路径。请参见此处获取完整示例... - Holger

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接