如果之前使用 FileUtils.copyFile() 复制了 zip 文件,则在解压缩期间获取 "java.util.zip.ZipException: invalid distances set"

Getting "java.util.zip.ZipException: invalid distances set" during unzipping if zip file was copied with FileUtils.copyFile() before

我得到异常

java.util.zip.ZipException: invalid distances set
    at java.base/java.util.zip.InflaterInputStream.read(InflaterInputStream.java:165)
    at java.base/java.util.zip.ZipInputStream.read(ZipInputStream.java:195)
    at java.base/java.io.FilterInputStream.read(FilterInputStream.java:107)

当我想解压缩我之前用

复制的文件
FileUtils.copyFile(File srcFile, File destFile)

(org.apache.commons.io).

如果我不复制文件并使用原始 zip 文件,解压缩就可以了。

我还使用了与 google 番石榴不同的文件副本 API。但是错误 解压文件时也是一样

我要复制和解压的文件是一个大文件:它是一个 adopt-open-jdk zip 文件。

我认为不是解压逻辑错误。它与什么有关 copy 会对文件进行操作,使其无法正确解压缩。

我使用下面的示例代码进行解压: https://github.com/eugenp/tutorials/blob/master/core-java-modules/core-java-io/src/main/java/com/baeldung/unzip/UnzipFile.java

编辑:复制的文件没有损坏。文件大小与原始文件大小相同,我可以使用 7zip 打开复制的 zip 而没有错误。内容完整。

我自己发现了错误。之前的 Maven 构建过程将 zip 文件错误且不完整地复制到目标 jar 文件中,而不是直接复制到目标文件夹中。 之后,我通过类加载器访问该文件,fileutils.copy 复制了一个已经错误存储的 zip。

我的错,我确实在编写相同的文件时比较了错误的文件。