保存jar中文件夹中的所有文件

时间:2013-10-01 21:09:15

标签: java file jar resources directory

首先:

我知道,这个问题已被问过100次了。 我知道,有人已经给出了正确的答案。

但无论如何,我不得不再问这个问题。我找不到适合我的解决方案。遗憾。

我正在用java编写游戏。当然我有很多带声音和图片的包(文件夹)等等。但是这些文件夹都是可变大小的。所以我想在列表中动态保存这样一个文件夹的内容。

通常,我这样做:

File f[] = new File(getClass.getResource("/home/res/").toURI()).listFiles();

现在我可以迭代这个文件对象并保存每个文件。完善。真?

没有。当我将此项目提取到jar存档时,这会失败。所有这些都是因为uri不是“等级”或类似的东西。见这个例外:

C:\Users\Administrator\Desktop>java -jar Homework.jar
java.lang.IllegalArgumentException: URI is not hierarchical
        at java.io.File.<init>(Unknown Source)
        at homework.moonface.src.Moonface.loadSounds(Moonface.java:94)
        at homework.moonface.src.Moonface.<init>(Moonface.java:55)
        at control.Overview.main(Overview.java:16)

好的,我想,所以我需要获取此路径并将其手动添加到文件对象中。 (新文件(“路径”);但是......这不起作用。我收到输入未正确写入的已知错误,或者当我尝试从资源URL剪切“file:”时,它打破了因为在jar中它的“jar:file:”而不是“file:”。但是如果我剪切jar:file:我得到null。

所以,请不要将此标记为副本,并尽快为我解释。这将有助于其他千万不了解其他不是解决方案的解决方案。

1 个答案:

答案 0 :(得分:1)

试试这个:

    URL jarResourceURL = getClass().getResource("/home/res/");
    JarURLConnection jarURLConnection = (JarURLConnection) jarResourceURL.openConnection();
    Enumeration<JarEntry> entries = jarURLConnection.getJarFile().entries();
    while (entries.hasMoreElements()){
        entries.nextElement(); // iterate over entries and do something
    }

UPD:我在考虑Spring框架ClassPathXmlApplicationContext如何从jar中解析资源。所以我调查了源代码并且有一个实用程序类org.springframework.core.io.ClassPathResource,它有一个方便的接口(而且有可能使用它来获取相应的java.io.File实例)并且可以帮助你解决问题。这是文档: http://docs.spring.io/spring/docs/2.5.x/api/org/springframework/core/io/ClassPathResource.html

相关问题