【发布时间】:2010-11-28 14:06:25
【问题描述】:
我有这段代码可以从一个目录中读取所有文件。
File textFolder = new File("text_directory");
File [] texFiles = textFolder.listFiles( new FileFilter() {
public boolean accept( File file ) {
return file.getName().endsWith(".txt");
}
});
效果很好。它用目录“text_directory”中所有以“.txt”结尾的文件填充数组。
如何以类似的方式在 JAR 文件中读取目录的内容?
所以我真正想做的是,列出我的 JAR 文件中的所有图像,以便我可以加载它们:
ImageIO.read(this.getClass().getResource("CompanyLogo.png"));
(因为“CompanyLogo”是“硬编码”,但 JAR 文件中的图像数量可以是 10 到 200 个可变长度。)
编辑
所以我想我的主要问题是:如何知道我的主类所在的JAR 文件的名称?
当然,我可以使用 java.util.Zip 阅读它。
我的结构是这样的:
他们是这样的:
my.jar!/Main.class
my.jar!/Aux.class
my.jar!/Other.class
my.jar!/images/image01.png
my.jar!/images/image02a.png
my.jar!/images/imwge034.png
my.jar!/images/imagAe01q.png
my.jar!/META-INF/manifest
现在我可以使用以下方法加载例如“images/image01.png”:
ImageIO.read(this.getClass().getResource("images/image01.png));
但只是因为我知道文件名,其余的我必须动态加载它们。
【问题讨论】:
-
只是一个想法 - 为什么不将图像压缩到一个单独的文件中,然后从另一个 jar 中的类中读取其中的条目?
-
因为分发/安装需要“额外”步骤。 :( 你知道,最终用户。
-
鉴于您已经创建了 jar,您不妨在其中包含文件列表,而不是尝试任何技巧。
-
好吧,我可能弄错了,但是 jar 可以嵌入到其他 jar 中。 one-jar(TM) 包装解决方案ibm.com/developerworks/java/library/j-onejar 在此基础上运作。除非,在您的情况下,您不需要加载类的能力。
标签: java file jar java-io getresource