2012-09-10 69 views
9

这样做(相对简单)的代码时,我得到这个错误:java.util.zip.ZipException:无效CEN头(错误签名)

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成功。解压缩本身似乎处理得很好。我猜这意味着这些zip文件可能是由java 7可以理解的一些更新版本的zip创建的,但以前的版本不能。但是,任何见解,将不胜感激。此外,由于在生产中我没有真正选择使用java 7,所以使java的早期版本能够理解这个新版本的zip(如果实际上当然是什么问题)。

谢谢!您的评论提供

+0

你能提供zip样​​品吗? –

+0

*叹息*,不幸的是,我不能..有问题的文件是巨大的(707 megs),我不生产它们。 – bnsh

+1

嗯..但是:我可以做7z l -slt whatever.zip并且得到 ' 7-Zip [64] 9.20 Copyright(c)1999-2010 Igor Pavlov 2010-11-18 p7zip版本9.20(locale = en_US .UTF-8,UTF16 =开,HugeFiles =上,8个CPU) 清单归档:./081212j400-13_file1of3.zip - 路径= ./081212j400-13_file1of3.zip 类型=拉链 64位= + 实际尺寸= 707951519 ' 嗯。我似乎不能正确地格式化。希望它仍然遇到寿。 – bnsh

回答

14

7z l -slt输出是非常有用的:

类型=压缩64位

给人一种暗示,它的ZIP64(4.5 ZIP规范的版本) 。但是,虽然Java7支持它,但此时此支持不会回溯到Java6,您将不得不求助于外部库,例如Apache Compress

P.S.作为参考,file test.zip会输出类似于

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

对于我来说,文件格式是正确的,但是JAR超过了100MB,正在跳过我们集群上的一些设置。希望这可以帮助某人。 – Sid

+0

当Zip大小超过4GB(显然)时,像7zip这样的Zip工具会自动更改为64位, –

相关问题