【问题标题】:Exception unzipping in java war file under LinuxLinux下java war文件解压异常
【发布时间】:2018-10-23 18:59:28
【问题描述】:

在我的 java 应用程序中解压缩 zip 文件时遇到问题。它是一个打包为 war 文件并在 jetty 9.4 下运行的 Web 服务。 这是我的(缩短的)堆栈跟踪

2018-05-10 20:13:48,180 ERROR [ProductPublisherHelper:63] net.lingala.zip4j.exception.ZipException: net.lingala.zip4j.exception.ZipException: compression type not supported
net.lingala.zip4j.exception.ZipException: net.lingala.zip4j.exception.ZipException: net.lingala.zip4j.exception.ZipException: compression type not supported
        at net.lingala.zip4j.unzip.Unzip.initExtractFile(Unzip.java:163)
        at net.lingala.zip4j.unzip.Unzip.initExtractAll(Unzip.java:83)

我的服务器在 Ubuntu 16.04 下运行。 到目前为止,此代码运行良好。就是这一个文件解压失败。同时,相同的代码在相同的条件下(码头、战争、相同的文件解压)在 Windows 上运行得非常好......

该文件是一个大于 1GB 的大 TIF 压缩文件,除此之外我不认为它有什么特别之处。我的设置中是否有什么我应该检查的东西可以解释为什么它在 Linux 下失败但在 Windows 下工作? JDK在Windows下是1.8.0_101,在Linux下是1.8.0_171。

【问题讨论】:

  • 战争可以对 .class 文件使用 java 特定的压缩。所以跳过那些。
  • “跳过那些”是什么意思?
  • 不解压 .class zip 条目。 (这可能是不可行的,当解包由第三方库完成时。)可以使用 Java SE zip 功能提取这些 zip 条目。
  • 抱歉,我刚刚意识到我在 Windows 上的测试实际上并没有工作。 zip 文件使用 Java 不支持的压缩方法。我查了一下,上面写着方法 9。据我所知,Java 只支持其中的有限数量,并且确实不包括 9。似乎也没有为此维护的 Java 库,所以我可能需要在后台调用脚本命令行...
  • 啊哈,方法 9,专有的 DEFLATE64。 github.com/thejoshwolfe/yauzl/issues/58

标签: java zip zip4j


【解决方案1】:

您使用的外部库可能有问题。对于我的项目,我使用内置的ZipInputStream

创建输入流:ZipInputStream zis = new ZipInputStream(Files.newInputStream(inputPath))

浏览 .zip 中的文件:ZipEntry ze = zis.getNextEntry();

将输入从 zip 复制到一个新文件:

try (OutputStream output = Files.newOutputStream(newFile)) { IOUtils.copy(zis, output); }

来自 org.apache.commons.io 的 IOUtils

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    • 1970-01-01
    • 2023-03-28
    • 2021-09-27
    • 2013-01-14
    相关资源
    最近更新 更多