java.util.zip.ZipError: 无效的 CEN 标头 (签名错误)

2022-09-03 10:01:28

我在Red Hat Linux上使用Java 1.7.0_40,我有以下代码:

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

该变量指向一个 788MB 的 zip 文件。zip 文件的未压缩大小为 8.3GB。当我运行上面的代码时,我得到以下异常:filename

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文件。谁能解释为什么会发生这种情况?

谢谢。


答案 1

我也在基于Maven的项目中遇到了这个问题。出现此问题是由于 jar 损坏造成的。从.m2文件夹中删除了jars并再次构建了该项目;它像魅力一样工作。


答案 2

出现此问题的原因是 jar 文件已下载已损坏。

如果您使用的是 Maven。

  • 要解决此问题,请删除 C:/Users/public/.m2/repository 文件夹中的特定 Jar 文件。
  • 之后,在POM中添加新版本的Maven.xml。
  • 重建并尝试。它将正常工作。

推荐