如何以编程方式加载applet的JAR文件中给定目录中的所有资源文件?资源可能会在程序的生命周期内多次更改,因此我不想在其中对名称进行硬编码。
通常我会使用File.list()遍历目录结构,但是当我尝试在applet中执行此操作时会遇到权限问题。我还研究了使用类似于ClassLoader.getResources()的枚举,但它只能在JAR文件中找到相同名称的文件。
基本上我想做的就是这样的事情:
ClassLoader imagesURL = this.getClass().getClassLoader();
MediaTracker tracker = new MediaTracker(this);
Enumeration<URL> images = imagesURL.getResources("resources/images/image*.gif");
while (images.hasMoreElements()){
tracker.add(getImage(images.nextElement(), i);
i++;
}
我知道我可能错过了一些明显的功能,但我花了几个小时搜索教程和文档,以便在一个未签名的applet中执行此操作。
答案 0 :(得分:1)
您可以通过两种方式实现:
image_1
,image_2
,image_3
)枚举它们,然后您可以一次性收集所需的所有资源。否则你需要编写很多代码。这个想法是你必须:
确定JAR文件的路径:
private static final String ANCHOR_NAME = "some resource you know";
URL location = getClass().getClassLoader().getResource(ANCHOR_NAME);
URL jarLocation;
String protocol = location.getProtocol();
if (protocol.equalsIgnoreCase("jar"))
{
String path = location.getPath();
int index = path.lastIndexOf("!/" + ANCHOR_NAME);
if(index != -1)
jarLocation = new URL(path.substring(0, index));
}
if (protocol.equalsIgnoreCase("file"))
{
String string = location.toString();
int index = string.lastIndexOf(ANCHOR_NAME);
if(index != -1)
jarLocation = new URL(string.substring(0, index));
}
将其打开为java.util.jar.JarFile
JarFile jarFile = new JarFile(jarLocation);
遍历所有条目并将其名称与给定的掩码匹配
for (Enumeration entries = jarFile.entries(); entries.hasMoreElements();)
{
JarEntry entry = (JarEntry) entries.nextElement();
String entryPath = entry.getName();
if (entryPath.endsWith(".jpg"))
{
// do something with it
}
}
如需其他代码支持,我会将您推荐给Spring PathMatchingResourcePatternResolver#doFindPathMatchingJarResources()。