【问题标题】:Very large zip file (> 50GB) --> ZipException: invalid CEN header非常大的 zip 文件 (> 50GB) --> ZipException: 无效的 CEN 标头
【发布时间】:2012-04-10 20:52:09
【问题描述】:

我正在尝试用 JAVA 打开一个 ZIP 文件。

下面的代码工作正常,除了一些大文件,在这种情况下我得到以下异常:

Exception in thread "main" java.util.zip.ZipException: invalid CEN header (bad signature)
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:114)
at java.util.zip.ZipFile.<init>(ZipFile.java:75)

是否存在已知错误?可能是因为 JAVA 不支持更高的压缩级别?

请注意,我无法使用 Winzip 解压缩文件,Linux 下的 gzip 会出现数据长度错误(未压缩文件约为 80 GB)。我不得不使用以下解决方法来解压缩它:

gunzip -S .zip < file.zip > file

任何想法都会非常有帮助。

代码:

if (file.getExtension().equals("gz")) {
  br = new BufferedReader(new InputStreamReader(new GZIPInputStream(new FileInputStream(name))));
}
else if (file.getExtension().equals("zip")) {
    ZipFile zipFile = new ZipFile(name); // <-------------------FAILS HERE
    Enumeration<? extends ZipEntry> entries = zipFile.entries();
    while (entries.hasMoreElements()) {
        ZipEntry zipEntry = entries.nextElement();
        System.out.println("ZIP File in the archive:" + zipEntry.getName());
        br = new BufferedReader(new InputStreamReader(zipFile.getInputStream(zipEntry)));
        break;
    }
}

【问题讨论】:

  • 也许 Apache Commons Compression 可以在这里提供帮助?据我所知,内置的 zip 实现并不是最好的。
  • 默认 zip 实现中存在大小限制。您可能会发现这个answer 很有用。

标签: java exception header zip large-files


【解决方案1】:

如果您使用的不是 Java 7(支持 ZIP64),问题可能是that java is trying to use the old ZIP format

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    相关资源
    最近更新 更多