9

执行此(相对简单的)代码时出现此错误:

    ZipFile zf = new ZipFile(fn);
    Enumeration<? extends ZipEntry> eze = zf.entries();
    while (eze.hasMoreElements()) {
        ZipEntry ze = eze.nextElement();
        System.out.println(ze.getName());
    }
    zf.close();

实际上。有趣的是,我在 java-sun-6u32 和 java-1.6.0-openjdk-amd64 上得到了它,但是 java-sun-7u4 成功了。unzip 本身似乎可以很好地处理它。我猜这意味着这些 zipfiles 可能是由 java 7 理解的一些较新版本的 zip 创建的,但以前的版本没有。但是,任何见解将不胜感激。此外,由于在生产中我真的没有使用 java 7 的选项,任何使早期版本的 java 理解这个新版本的 zip 的方法(如果这实际上问题所在,当然。)

谢谢!

4

1 回答 1

15

7z l -slt您的评论中提供的输出非常有用:

类型 = zip 64 位

给出一个提示,它是ZIP64ZIP规范的 4.5 版)。然而,尽管Java7支持它,但目前这种支持还没有向后移植到Java6,您将不得不求助于外部库,例如 Apache Compress

PS作为参考,file test.zip会输出类似

test.zip: Zip archive data, at least v4.5 to extract
于 2012-09-10T22:09:01.170 回答