使用InputStreamReader读取JAR中的目录

因此,我相信这个问题已经问了一百万遍了,我已经阅读了几个小时,并尝试了一些人给出的几种选择,但是没有一个对我有用。

我想列出应用程序JAR内目录中的所有文件,因此在IDE中可以运行:

File f = new File(this.getClass().getResource("/resources/").getPath());

for(String s : f.list){

System.out.println(s);

}

这给了我目录中的所有文件。

现在,我也尝试过:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("resources/");

InputStreamReader inReader = new InputStreamReader(in);

Scanner scan = new Scanner(inReader);

while (scan.hasNext()) {

String s = scan.next();

System.out.println("read: " + s);

}

System.out.println("END OF LINE");

然后从IDE中打印目录中的所有文件。外部IDE打印:“行尾”。

现在,我也可以在Jar中找到一个条目:

        String s = new File(this.getClass().getResource("").getPath()).getParent().replaceAll("(!|file:\\\\)", "");

JarFile jar = new JarFile(s);

JarEntry entry = jar.getJarEntry("resources");

if (entry != null){

System.out.println("EXISTS");

System.out.println(entry.getSize());

}

那是我必须对那个String进行的可怕编码。

无论如何…我无法在Jar的“ resources”目录中获取资源列表。该怎么办?

回答:

如果不先枚举Jar文件的内容,就无法简单地获取内部资源的过滤列表。

幸运的是,这实际上并不难(对我来说幸运的是,您已经完成了大部分工作)。

基本上,一旦有了对的引用JarFile,您只需要询问它entries并在该列表上进行迭代即可。

通过检查JarEntry所需匹配项的名称(即resources),您可以过滤所需的元素…

例如…

import java.io.File;

import java.io.IOException;

import java.util.Enumeration;

import java.util.jar.JarEntry;

import java.util.jar.JarFile;

public class ReadMyResources {

public static void main(String[] args) {

new ReadMyResources();

}

public ReadMyResources() {

JarFile jf = null;

try {

String s = new File(this.getClass().getResource("").getPath()).getParent().replaceAll("(!|file:\\\\)", "");

jf = new JarFile(s);

Enumeration<JarEntry> entries = jf.entries();

while (entries.hasMoreElements()) {

JarEntry je = entries.nextElement();

if (je.getName().startsWith("resources")) {

System.out.println(je.getName());

}

}

} catch (IOException ex) {

ex.printStackTrace();

} finally {

try {

jf.close();

} catch (Exception e) {

}

}

}

}

这种类型的问题实际上有点问。与其尝试在运行时读取Jar的内容,不如生成某种包含可用资源列表的文本文件,这会更好。

这可以由您的构建过程在创建Jar文件之前动态产生。然后(getClass().getResource()例如,通过)读取该文件,然后在文本文件中查找每个资源列表,这将是一个简单得多的解决方案…恕我直言

以上是 使用InputStreamReader读取JAR中的目录 的全部内容, 来源链接: utcz.com/qa/399913.html

回到顶部