如果不先枚举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()例如,通过)读取该文件,然后在文本文件中查找每个资源列表,这将是一个简单得多的解决方案…恕我直言



