You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何复现java.util.zip.ZipException: ZIP_Read: error reading zip file异常?

复现java.util.zip.ZipException: ZIP_Read: error reading zip file的可行方法

嘿,我来帮你搞定这个异常复现的问题!要触发这个特定的ZIP读取异常,其实有好几种实操性很强的方法,我给你逐一拆解:

  • 手动破坏ZIP文件头
    正常的ZIP/JAR文件开头都是固定的字节序列 PK\x03\x04(十六进制是50 4B 03 04)。你可以用任意支持二进制编辑的工具(比如Notepad++的二进制编辑模式)打开一个正常的ZIP/JAR文件,把开头的几个字节改成乱码(比如改成XX\x03\x04),保存后用Java代码尝试读取这个文件,大概率会触发目标异常。

  • 截断ZIP文件至不完整状态
    用系统工具把正常的ZIP/JAR文件截短,让它变成一个不完整的压缩包:

    • Linux/macOS下执行命令:truncate -s 100 your-corrupted-file.zip(把文件大小强行改成100字节,远小于原文件)
    • Windows下执行命令:fsutil file seteof your-corrupted-file.zip 100
      之后用Java的ZipFile或ZipInputStream读取这个截断后的文件,就会因为无法读取完整的压缩结构而抛出异常。
  • 在ZIP文件末尾添加无效数据
    找一个正常的ZIP/JAR文件,用文本编辑器打开后在末尾粘贴一段乱码文本(或者随便复制其他文件的内容),保存后再用Java读取。当ZIP解析器读完正常结构后遇到无效数据,就会触发读取错误。

  • 修改压缩条目的内容
    先创建一个包含多个文件的ZIP包,然后用二进制编辑器找到其中一个压缩条目的数据段,随便修改几个字节(比如把连续的几个0改成FF)。当Java尝试解压这个被篡改的条目时,就会因为数据校验失败或格式错误抛出目标异常。

示例Java测试代码

你可以用这段代码来测试上述损坏的文件:

import java.io.File;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class CorruptedZipTest {
    public static void main(String[] args) {
        File corruptedFile = new File("your-corrupted-file.zip");
        try (ZipFile zipFile = new ZipFile(corruptedFile)) {
            // 遍历所有条目,触发读取操作
            for (ZipEntry entry : zipFile.stream().toList()) {
                System.out.println("Reading entry: " + entry.getName());
                // 尝试打开输入流,触发解压读取
                zipFile.getInputStream(entry);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

注意:不同Java版本的异常信息可能略有差异,但ZIP_Read: error reading zip file这个异常通常是在底层读取遇到IO错误或严重格式损坏时抛出的,上述方法基本都能触发这个异常。

内容的提问来源于stack exchange,提问作者gonzo33

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 21:47:42