gpt4 book ai didi

java - 从资源中枚举特定类型的所有文件

转载 作者:行者123 更新时间:2023-11-30 04:37:14 26 4
gpt4 key购买 nike

我有一个 JAR 文件,它包含在 JNLP 文件的资源部分中。它的子文件夹中包含大量图像。

用户稍后应该能够替换此 JAR 文件来添加/删除图像。

有没有一种方法可以枚举资源中的所有文件,例如 .GIF 作为文件扩展名,甚至更好地指定像“images/*.gif”这样的模式(所以我只获取具有“images”的图像他们的父目录)。

另一个选择是编写一个反射(reflect)文件结构的文本文件。这样你就可以逐行、逐个图像地运行它,但这意味着你必须更新两个地方,这对用户来说不太友好。

最佳答案

是的,你只需捕获 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()]);
}

关于java - 从资源中枚举特定类型的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13183248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com