如何列出目录中的所有文件 - 部署

how to list all files in directory - deployment

我有一个结构如下的项目:

Myproject
|--package1
|  |--class1
|--package2
|  |--class2
|--rsc
|  |--images
|     |--image1
      |--image2

我的问题是在将此项目导出为 .jar 后获取图像目录中的所有文件(images1 和 images2)。

研究问题后,我发现我可以在部署后使用它来访问资源:

this.getClass().getClassLoader().getResource(path);

但是使用这种方法我只能获取资源,而不是该文件夹中的所有文件。

这是我尝试做的:

File[] files = new File(this.getClass().getClassLoader().getResource("images").getFile()).listFiles();

它在 Eclipse 中工作,但当我将项目导出为 .jar 时它不工作。

有什么解决办法吗?

可以循环访问 jar 文件中文件夹的内容。然而,这样做很痛苦。

看看 JarFile class。您可以使用 entries() 方法获取 Jar 的所有条目,然后仅查看以 "images/".

开头的条目来过滤它们

像这样:

// this is a lengthy work around to figure out the path of the jar file that   
// this application was started from
File pathToJar = new File(Util.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath());

JarFile jarFile = new JarFile(pathToJar);
java.util.Enumeration enumEntries = jarFile.entries();
while (enumEntries.hasMoreElements()) {
    java.util.jar.JarEntry file = (java.util.jar.JarEntry) enumEntries.nextElement();

    if(!file.getName().contains("images/")) {
        continue;
    }

    // do something with that JarEntry

}

这在 运行 Eclipse 中的应用程序时不起作用(因为没有要扫描的 JarFile)。
您需要在您的代码中做出区分,您要么以正常方式遍历目录,要么以这种方式使用 Jar 文件,具体取决于您启动应用程序的方式。

如果这太难看and/or 工作量太大,您可能还应该考虑将该资源文件夹放在实际文件系统上的 jar 之外。
然后你就可以像访问任何其他目录一样访问它:

File[] files = new File("./rsc/images/").listFiles();

您只需确保在您的部署或其他分发应用程序的方式中包含该文件夹。