簡體   English   中英

java.util.zip.ZipError:無效的 CEN header(簽名錯誤)

[英]java.util.zip.ZipError: invalid CEN header (bad signature)

我在 Red Hat Linux 上使用 Java 1.7.0_40 並且我有以下代碼:

Path zipfile = Paths.get(filename);
FileSystem fs = FileSystems.newFileSystem(zipfile, FileTest.class.getClassLoader());

filename變量指向 zip 文件,大小為 788MB。 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 文件夾中刪除 jars 並重新構建項目; 它的作用就像魅力一樣。

出現此問題是由於下載的 jar 文件已損壞。

如果您使用的是 Maven。

  • 要解決此問題,請刪除C:/Users/public/.m2/repository文件夾中的特定 Jar 文件。
  • 之后在POM.xml中添加新版本的 Maven。
  • 重建並嘗試。 它會正常工作。

有兩種可能的解釋:

在我的例子中,我通過在創建 zip 文件的步驟中將Zip64Mode.Always更改為Zip64Mode.AsNeeded來解決它,所以它看起來像這樣:

ZipArchiveOutputStream zaos = new ZipArchiveOutputStream(os);
        zaos.setCreateUnicodeExtraFields(UnicodeExtraFieldPolicy.ALWAYS);
        zaos.setUseLanguageEncodingFlag(true);
        zaos.setUseZip64(Zip64Mode.AsNeeded);
        zaos.setFallbackToUTF8(true);
        zaos.setEncoding("UTF-8");

然后這行代碼開始工作:

try (FileSystem zipfs = FileSystems.newFileSystem(uri, env)) {
.
.
.
}

順便說一下,使用 Java 8。

問題JDK-4681995“添加對大(> 4GB)zip/jar 文件的支持”)解決了對 zip 存檔的大文件 (4GB+) 支持(即 64 位 zip 支持)。

但是,此更改直到 1.7.0 build 55 才包含在 Java 7 中,這是您使用的特定版本 (1.7.0 build 40) 之后的幾個版本。 更新到 build 55 或更高版本將解決該問題。

這是你的 pom 文件中 maven 編譯器的配置問題。 默認版本 java 源和目標是 1.5,即使使用的 JDK 也有更高的版本。

要修復,請添加具有更高 Java 版本的 Maven 編譯器插件配置部分,例如:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.6.1</version>
  <configuration>
    <source>1.6</source>
    <target>1.6</target>
  </configuration>
</plugin>

有關更多信息,請查看以下鏈接:

Maven 編譯器

錯誤報告

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM