Red Hat LinuxでJava 1.7.0_40を使用しています。次のコードがあります。
Path zipfile = Paths.get(filename);
FileSystem fs = FileSystems.newFileSystem(zipfile, FileTest.class.getClassLoader());
filename
変数は、788MBのZipファイルを指します。 Zipファイルの非圧縮サイズは8.3GBです。上記のコードを実行すると、次の例外が発生します。
Exception in thread "main" Java.util.Zip.ZipError: invalid CEN header (bad signature)
at com.Sun.nio.zipfs.ZipFileSystem.zerror(ZipFileSystem.Java:1605)
at com.Sun.nio.zipfs.ZipFileSystem.initCEN(ZipFileSystem.Java:1058)
at com.Sun.nio.zipfs.ZipFileSystem.<init>(ZipFileSystem.Java:130)
at com.Sun.nio.zipfs.ZipFileSystemProvider.newFileSystem(ZipFileSystemProvider.Java:139)
at Java.nio.file.FileSystems.newFileSystem(FileSystems.Java:386)
at FileTest.readFromZip(FileTest.Java:35)
at FileTest.main(FileTest.Java:25)
Java 7は大きなZipファイルを処理できたという印象を受けました。これがなぜ起こっているのか説明できますか?
ありがとう。
私もMavenベースのプロジェクトで問題に直面しました。この問題は、破損したjarが原因で発生しました。 .m2フォルダーからjarを削除し、プロジェクトを再度ビルドしました。そしてそれは魅力のように働いた。
この問題は、jarファイルがダウンロードされたために発生します。
2つの可能な説明があります。
破損したZipファイルがあります- maven2のコンパイルエラー: "無効なCENヘッダー(不正な署名)"
Zip-64と関係があります。
ただし、Zip-64サポートは明らかに1.7.0_b55でのみ追加されたことにも注意してください... https://blogs.Oracle.com/xuemingshen/entry/Zip64_support_for_4g_zipfile
Zipアーカイブの大きなファイル(4GB +)のサポート(64ビットZipサポートなど)が問題で解決されました JDK-4681995 ( "大規模(> 4GB)のサポートを追加Zip/jarファイル」)。
ただし、この変更は、使用している特定のバージョン(1.7.0ビルド40)の後のいくつかのビルドである1.7.0ビルド55まで、Java 7に含まれていませんでした。 55以降で問題が解決します。