我有一个JAR文件,它包含在我的JNLP文件的资源部分中。这包含子文件夹中的大量图像。
用户应该可以在以后替换此JAR文件来添加/删除图像。
有没有办法枚举资源中的所有文件,比如.GIF作为文件扩展名,甚至可以更好地指定像" images / * .gif" (所以我得到的图像有"图像"作为他们的父目录。)
另一种选择是编写反映文件结构的文本文件。通过这种方式,您可以逐行逐行,但这意味着您必须更新两个地方,这不是非常用户友好。
答案 0 :(得分:2)
是的,你只需抓住jar并移动到目录然后枚举里面的文件:
public String[] getFiles() throws IOException {
ArrayList<String> list = new ArrayList<String>();
List<JarEntry> ents = new ArrayList<JarEntry>();
Enumeration<JarEntry> e = null;
URL jarp = getLocation();
if (jarp != null) {
jar = jarp.getProtocol().equalsIgnoreCase("jar") ? jarp : new URL("jar:" + jarp.toString() + "!/");
JarFile jarf = null;
try {
jarf = AccessController.doPrivileged(
new PrivilegedExceptionAction<JarFile>() {
@Override
public JarFile run() throws Exception {
JarURLConnection conn = (JarURLConnection) jar.openConnection();
conn.setUseCaches(false);
return conn.getJarFile();
}
});
} catch (PrivilegedActionException ex) {
Logger.getLogger(LicenseLoader.class.getName()).log(Level.SEVERE, null, ex);
}
e = jarf.entries();
while (e.hasMoreElements()) {
JarEntry je = e.nextElement();
if (!je.isDirectory()) {
ents.add(je);
}
}
for (JarEntry ent : ents) {
if ((ent.getName().startsWith(pathName)) && (ent.getName().endsWith(".gif"))) {
String name = ent.getName().replace(pathName, "");
list.add(name);
}
}
}
return list.toArray(new String[list.size()]);
}