猿问

如何列出JAR文件中的文件?

如何列出JAR文件中的文件?

我有这样的代码,它从一个目录中读取所有文件。

    File textFolder = new File("text_directory");

    File [] texFiles = textFolder.listFiles( new FileFilter() {
           public boolean accept( File file ) {
               return file.getName().endsWith(".txt");
           }
    });

效果很好。它用所有以“.txt”结尾的目录“text_目录”结尾的文件填充数组。

如何以类似的方式读取目录的内容?一个罐子文件?

所以我真正想做的是列出JAR文件中的所有图像,这样我就可以用:

ImageIO.read(this.getClass().getResource("CompanyLogo.png"));

(这是因为“CompanyLogo”是“硬编码”的,但是JAR文件中的图像数量可能是10到200个可变长度。)

编辑

所以我想我的主要问题是:如何知道JAR文件的名称我的主要班级住在哪里?

我可以用java.util.Zip.

我的结构是这样的:

它们就像:

my.jar!/Main.classmy.jar!/Aux.classmy.jar!/Other.classmy.jar!/images/image01.png
my.jar!/images/image02a.png
my.jar!/images/imwge034.png
my.jar!/images/imagAe01q.png
my.jar!/META-INF/manifest

例如,现在我可以使用以下方法加载“图像/图像01.png”:

    ImageIO.read(this.getClass().getResource("images/image01.png));

但是仅仅因为我知道文件名,剩下的部分我必须动态加载它们。


绝地无双
浏览 487回答 3
3回答

慕盖茨4494581

CodeSource src = MyClass.class.getProtectionDomain().getCodeSource();if (src != null) {   URL jar = src.getLocation();   ZipInputStream zip = new ZipInputStream(jar.openStream());   while(true) {     ZipEntry e = zip.getNextEntry();     if (e == null)       break;     String name = e.getName();     if (name.startsWith("path/to/your/dir/")) {       /* Do something with this entry. */       ...     }   }} else {   /* Fail... */}注意,在Java 7中,您可以创建一个FileSystem从JAR(Zip)文件,然后使用NIO的目录遍历和过滤机制来搜索它。这将使编写处理JAR和“爆炸”目录的代码变得更容易。
随时随地看视频慕课网APP

相关分类

Java
我要回答