Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何列出目录中的所有文件-部署_Java_Eclipse_File_Deployment - Fatal编程技术网

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

Java 如何列出目录中的所有文件-部署,java,eclipse,file,deployment,Java,Eclipse,File,Deployment,我的项目结构如下: 我的问题是在我将这个项目导出为.jar之后,如何获取images目录中的所有文件(images1和images2) 在研究该问题后,我发现我可以在部署后使用它访问资源: this.getClass().getClassLoader().getResource(path); 但使用这种方法,我只能获取资源,而不是该文件夹中的所有文件 这就是我试图做的: File[] files = new File(this.getClass().getClassLoader().getR

我的项目结构如下:

我的问题是在我将这个项目导出为.jar之后,如何获取images目录中的所有文件(images1和images2)

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

this.getClass().getClassLoader().getResource(path);
但使用这种方法,我只能获取资源,而不是该文件夹中的所有文件

这就是我试图做的:

File[] files = new File(this.getClass().getClassLoader().getResource("images").getFile()).listFiles();
它在Eclipse中工作,但在我将项目导出为.jar时不工作


有什么解决办法吗?

可以在jar文件中遍历文件夹的内容。然而,这样做是相当痛苦的

看看这门课。您可以使用
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中运行应用程序时,这将不起作用(因为没有要扫描的JAR文件)。
您需要在代码中进行区分,在代码中,您可以以常规方式迭代目录,也可以根据启动应用程序的方式将此方式用于Jar文件

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

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

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

这种方法非常痛苦。例如,我不能将rsc文件夹放在.jar的同一个目录中,然后访问它吗?这也是可能的。我编辑了我的答案,将其也包括在内。
File[] files = new File("./rsc/images/").listFiles();