java.util.zip.ZipException:CEN标头无效(签名错误)

bns*_*nsh 9 java zip

在执行此(相对简单的)代码时,我收到此错误:

    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();
Run Code Online (Sandbox Code Playgroud)

其实.有趣的是,我在java-sun-6u32和java-1.6.0-openjdk-amd64上得到它,但是java-sun-7u4成功了.解压缩本身似乎处理得很好.我猜这意味着这些zip文件可能是由java 7理解的一些较新版本的zip创建的,但之前的版本没有.但是,任何见解都将受到赞赏.此外,由于在生产中我真的没有使用Java 7的选项,使早期版本的Java的任何方式理解拉链的这个新版本(如果这其实什么问题,当然).

谢谢!

bar*_*ddu 15

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

Type = zip 64位

给出一个提示,它是ZIP64(ZIP规范的4.5版本).但是,尽管Java7支持它,但此支持目前还没有向后移植到Java6,您将不得不求助于外部库,例如Apache Compress.

PS供参考,file test.zip会输出类似的东西

test.zip: Zip archive data, at least v4.5 to extract
Run Code Online (Sandbox Code Playgroud)