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

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

ZipFile zf = new ZipFile(fn); Enumeration 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成功了。 解压缩本身似乎处理得很好。 我猜这意味着这些zip文件可能是由java 7理解的一些较新版本的zip创建的,但之前的版本没有。 但是,任何见解都会受到赞赏。 另外,因为在制作中我真的没有选择使用java 7,任何使早期版本的java都能理解这个新版本的zip(当然,如果事实上这就是问题所在。)

谢谢!

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

Type = zip 64位

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

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

 test.zip: Zip archive data, at least v4.5 to extract