【发布时间】: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