2012-09-10 111 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位, –

相關問題