我在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文件。任何人都可以解释为什么会这样吗?
感谢。
答案 0 :(得分:13)
我也在基于Maven的项目中遇到了这个问题。问题发生的原因是罐子腐烂了。从.m2文件夹中删除了jar并重新构建了项目;它就像魅力一样。
答案 1 :(得分:10)
发生此问题由于下载的jar文件已损坏。
答案 2 :(得分:4)
有两种可能的解释:
您的ZIP文件已损坏 - Compile error in maven2: "invalid CEN header (bad signature)"
这与ZIP-64有关:
java.util.zip.ZipException: invalid CEN header (bad signature)
但请注意,ZIP-64支持显然只是在1.7.0_b55中添加... https://blogs.oracle.com/xuemingshen/entry/zip64_support_for_4g_zipfile
答案 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>
有关详情,请查看以下链接: