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

标签 java eclipse file deployment

我有一个项目结构如下:

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

我的问题是在将此项目导出为 .jar 后获取 images 目录中的所有文件(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 文件一起使用,具体取决于您启动应用程序的方式。

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

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

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

关于java - 如何列出目录中的所有文件 - 部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497967/

相关文章:

java - 为什么这个正则表达式不匹配任何东西?

java - mvn clean install 不会在目标文件夹中生成 jbehave 故事文件

android - android 中的 ColorDrawable 中没有方法 "getColor"

java - ContentValue 不接受 BigDecimal

c - 将文件中的字符串存储到数组中

c - 如何正确解析文本文件?

java - JFrame 主题和外观

java - 如何让 spring boot mvc 理解 observables?

java - 将 Action 监听器添加到 JComboBox

file - YAML:在根部分可以有一个列表吗?