3

我在 Windows 2008 r2 vm 上压缩了一堆 IIS 日志文件,方法是在 Windows 资源管理器中选择它们,然后使用 Send To -> Compressed zipped 文件夹。

我使用 java.util.ZipFile、zip4j 和 apache commons 压缩库在 scala 中编写了不同的程序。

zip4j 返回:Exception in thread "main" net.lingala.zip4j.exception.ZipException: Unknown compression method

公地压缩回报:org.apache.commons.compress.compressors.CompressorException: No Compressor found for the stream signature.

java.util.Zip 返回:java.util.zip.ZipException: invalid compression method

这些 zip 文件有什么特别之处,以至于这些方法都无法解压缩它们?

如何使用 JVM 库解压缩它们?

作为示例,我使用以下代码:https ://stackoverflow.com/a/10634536/832783解压缩其中一个文件并返回invalid compression method异常。

这些是存档中的前 16 个字节: 在此处输入图像描述

4

1 回答 1

3

根据标题信息(来自您帖子的 16 个字节),zip 文件中的此条目是使用 Deflate64 加密的。不要将 Deflate64 与 Deflate 压缩相混淆。Deflate64 是 PKWare 的商标(PKWare 是 zip 格式的维护者),是 Deflate 压缩算法的增强版本。根据超级用户上的这个问题和github上的这个PR,如果文件大小大于2GB,Windows会使用Deflate64。zip4j 和 jdk 的 zip 实用程序尚不支持 Deflate64,但 commons-compress 1.16 版已支持 Deflate64。您可能可以尝试使用最新版本的 commons-compress 来解压缩您的 zip 文件。

编辑:或者,如果您可以选择,您可以尝试使用其他工具(7zip、zip4j 等)创建 zip 文件。这样您就不必处理 Deflate64,它使您的 zip 文件与其他工具兼容。

于 2019-12-21T12:34:04.667 回答