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

时间:2015-02-13 10:54:31

标签: java eclipse file deployment

我的项目结构如下:

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

我的问题是在将此项目导出为.jar后,将所有文件(images1& images2)放在images目录中。

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

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

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

这就是我试图做的事情:

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

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

有没有解决方案?

1 个答案:

答案 0 :(得分:1)

可以遍历jar文件中的文件夹内容。然而,这样做非常痛苦。

看一下JarFile课程。您可以使用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();

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