在没有首先枚举Jar文件的内容的情况下,无法简单地获取内部资源的过滤列表.
幸运的是,这实际上并不那么难(幸运的是,你已经完成了大部分的努力工作).
基本上,一旦你有了对JarFile的引用,你就需要简单地询问它的’条目并迭代该列表.
通过检查所需匹配的JarEntry名称(即资源),您可以过滤所需的元素…
例如…
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 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())然后查找文本文件中的每个资源列表…恕我直言