web-dev-qa-db-ja.com

java.util.Zip.ZipError:無効なCENヘッダー(不正な署名)

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ファイルを処理できたという印象を受けました。これがなぜ起こっているのか説明できますか?

ありがとう。

14
Justin Kredible

私もMavenベースのプロジェクトで問題に直面しました。この問題は、破損したjarが原因で発生しました。 .m2フォルダーからjarを削除し、プロジェクトを再度ビルドしました。そしてそれは魅力のように働いた。

13
Puneet Pandey

この問題は、jarファイルがダウンロードされたために発生します。

mavenを使用している場合。

  • この問題を解決するには、C:/Users/public/.m2/repositoryフォルダーの特定のJarファイルを削除します。
  • その後、Mavenの新しいバージョンをPOM.xmlに追加します。
  • 再構築して試してください。それは正常に動作します。
10
Thangadurai

2つの可能な説明があります。

5
Stephen C

Zipアーカイブの大きなファイル(4GB +)のサポート(64ビットZipサポートなど)が問題で解決されました JDK-4681995 "大規模(> 4GB)のサポートを追加Zip/jarファイル」)。

ただし、この変更は、使用している特定のバージョン(1.7.0ビルド40)の後のいくつかのビルドである1.7.0ビルド55まで、Java 7に含まれていませんでした。 55以降で問題が解決します。

0
vallismortis