如何列出目录中的所有文件 - 部署
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();
您只需确保在您的部署或其他分发应用程序的方式中包含该文件夹。
我有一个结构如下的项目:
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();
您只需确保在您的部署或其他分发应用程序的方式中包含该文件夹。