使用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