[英]java.util.zip.ZipException: invalid CEN header (bad signature)
[英]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 文件已损坏。
有两种可能的解释:
您有一个损坏的 ZIP 文件 - maven2 中的编译错误:“无效的 CEN 标头(错误的签名)”
这与 ZIP-64 有关:
但也要注意 ZIP-64 支持仅在 1.7.0_b55 中添加; 见https://bugs.openjdk.java.net/browse/JDK-4681995
在我的例子中,我通过在创建 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>
有关更多信息,请查看以下链接:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.