【问题标题】:Save all files from a folder in a jar将文件夹中的所有文件保存在 jar 中
【发布时间】:2013-10-08 04:34:56
【问题描述】:

第一:

我知道,这个问题已经被问了大约 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)

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

因此,请不要将其标记为重复,并尝试尽快为我解释一下。这将帮助成千上万的其他人,他们不了解其他不是解决方案的解决方案。

【问题讨论】:

  • 不求怜悯,不自欺欺人。如果您提出一个包含正确细节的正确问题(就像您似乎已经提出的那样),有人会帮助您。
  • 要明确一点:你有一个 jar 包,里面有一堆要写入文件系统的文件?
  • 是时候学习Ant了。使用 Ant 脚本,您可以管理所有资源
  • @SotiriosDelimanolis 我的洞项目在罐子里。 (双击文件)主类,其他类和资源。
  • 我不讨厌,我只是想请求原谅,因为这个问题已经被问过了......

标签: java file jar resources directory


【解决方案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

【讨论】:

  • 得到这个异常:java.lang.ClassCastException: sun.net.www.protocol.file.FileURLConnection cannot be cast to java.net.JarURLConnection at homework.moonface.src.Moonface.loadSounds(Moonface.java:93) at homework.moonface.src.Moonface.&lt;init&gt;(Moonface.java:55) at control.Overview.main(Overview.java:16)
  • 您是否尝试使用不在 jar 中的类路径成员?
  • 不是,但是资源必须在 jar 中.. 或者你是什么意思?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多