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

时间:2014-03-20 14:38:33

标签: java zip nio

我在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文件。任何人都可以解释为什么会这样吗?

感谢。

5 个答案:

答案 0 :(得分:13)

我也在基于Maven的项目中遇到了这个问题。问题发生的原因是罐子腐烂了。从.m2文件夹中删除了jar并重新构建了项目;它就像魅力一样。

答案 1 :(得分:10)

发生此问题由于下载的jar文件已损坏。

如果您使用的是Maven。

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

答案 2 :(得分:4)

有两种可能的解释:

答案 3 :(得分:0)

问题JDK-4681995解决了对zip档案的大文件(4GB +)支持(即64位zip支持)(“添加对大(> 4GB)zip / jar文件的支持” )。

但是,此更改直到1.7.0 build 55才包含在Java 7中,该版本是您使用的特定版本(1.7.0 build 40)之后的几个版本。更新到55或更高版本可以解决该问题。

答案 4 :(得分:-1)

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 compiler

bug report