2010-09-27 54 views
2

我有一個大的zip文件,4.3G。它包含約10萬條目。 我在Linux,Ubuntu 32位上使用Java 1.6.0_14讀取它,並獲得以下例外。讀取ZIP文件給出'無效的LOC頭'異常

java.util.zip.ZipException: invalid LOC header (bad signature) 
     at java.util.zip.ZipFile.read(Native Method) 
     at java.util.zip.ZipFile.access$1200(ZipFile.java:29) 
     at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:447) 
     at java.util.zip.ZipFile$1.fill(ZipFile.java:230) 
     at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:141) 
     at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) 
     at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) 
     at java.io.BufferedInputStream.read(BufferedInputStream.java:317) 
     at java.io.FilterInputStream.read(FilterInputStream.java:90) 

我沒有與任何其他的ZIP文件的問題(代碼來處理它們是非常成熟的),我已經驗證了我能正確解壓縮使用「解壓縮」命令行中的zip文件。

任何線索?謝謝!

回答

5

大小超過4GB的Zip文件需要ZIP文件閱讀器支持PKWARE的ZIP64擴展。

在Java 6之前,這種支持在java.util.zip類中不可用,並且最近才被添加到Java 7中(不用說,這不是GA版本,在編寫本文時)。

參考:

  1. Support for ZIP64 in Java 7 has been added
3

正如其他人所提到的,文件> 4GB不被ZIP標準的支持。有一個名爲ZIP64的擴展,它支持這個問題,但它在Java 7之前不會被支持。

有很多支持ZIP64的庫,但是當我最後一次選中時,它們都沒有支持流,但依賴於文件代替。如果這不會打擾你,TrueZip可能會正常工作。

如果你正在處理流,你將不得不使用臨時文件。

+0

+1爲TrueZip。花了一點時間才注意到TFile是File的一個子類,但在此之後TFileInputStream變得更有意義。 – 2011-08-23 17:22:50

相關問題