【问题标题】:FileNotFoundException when trying to access ZipFile in jar尝试访问 jar 中的 ZipFile 时出现 FileNotFoundException
【发布时间】:2013-04-25 12:59:15
【问题描述】:

我想在 Java 中打开一个 ZipFile,即从 Eclipse 导出项目后的 .jar 中。这是我写的代码:

String modpath = "/ModByDNSYeti.zip";
URL url = this.getClass().getResource(modpath);

ZipFile newTextures = new ZipFile(url.toString());

如果我执行 jar,我会得到一个

FileNotFoundException:文件:“路径”

其中“路径”是 ZipFile 所在的确切路径。它就在那里。我现在检查了一百次,但我不知道该怎么做。从 Eclipse 启动程序时出现相同的错误。 Google 也没有找到我。

问候 DNS雪人

【问题讨论】:

    标签: java file jar zip


    【解决方案1】:

    您正在尝试将资源作为文件访问,这将不起作用 - 这就是您收到 FileNotFound 异常的原因。您可以做的是将资源作为流获取并使用它来创建 ZipInputStream:

    ZipInputStream zipInStream = new ZipInputStream(this.getClass().getResourceAsStream(modpath));
    

    然后您可以使用 ZipInputStream 读取 ZIP 文件。

    【讨论】:

    • 感谢您的回答,但我有一个后续问题:
    • 在该方法的其余部分,将两个 ZipFile 合并为一个 ZipOutputStream。我可以简单地用 ZipInputStream 替换其中一个 ZipFile,但这会导致另一个问题:我希望 ZipInputStream 覆盖已由 ZipFile 放入 ZipOutputStream 的任何条目。由于我实际上无法删除 ZipOutputStream 中的任何项目,因此我必须检查覆盖的 ZipFile 是否包含该文件,如果包含,则不要让被覆盖的 ZipFile 将其作为条目放入流中。当覆盖文件是 ZipInputStream 时,这不起作用。
    • 如果您需要随机访问 zip,ZipInputStream 确实不是很有帮助。在这种情况下,您可能要考虑不将 .zip 文件放入 .jar 文件中,而是将它们与 .jar 本身一起发送。或者,您基本上可以将 .zip 从 .jar 复制到临时文件,然后使用 ZipFile(String) 进行随机访问。
    猜你喜欢
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 2012-08-15
    • 2019-10-19
    • 2013-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多