16

I'm using Java 1.7.0_40 on Red Hat Linux and I have the following code:

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

The filename variable points to a zip file that is 788MB. The uncompressed size of the zip file is 8.3GB. When I run the code above I get the following exception:

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)

I was under the impression that Java 7 was capable of handling large zip files. Can anyone explain why this is happening?

Thanks.

Justin Kredible
  • 8,354
  • 15
  • 65
  • 91
  • Possible duplicate of [Compile error in maven2: "invalid CEN header (bad signature)"](https://stackoverflow.com/questions/5453263/compile-error-in-maven2-invalid-cen-header-bad-signature) – OhadR May 08 '18 at 08:22

6 Answers6

17

I too faced the issue in Maven based project. The issue occurred because of corrupted jars. Deleted the jars from .m2 folder and built the project again; and it worked like charm.

Puneet Pandey
  • 960
  • 2
  • 14
  • 28
11

This problem occurs Due to jar file was downloaded is corrupted.

if you are using Maven.

  • For Solving this issue, Delete Particular Jar File in C:/Users/public/.m2/repository folder.
  • After that add New Version of Maven in POM.xml.
  • Rebuild and try. It will work fine.
Thangadurai
  • 524
  • 1
  • 9
  • 20
6

There are two possible explanations:

Stephen C
  • 698,415
  • 94
  • 811
  • 1,216
1

In my case i solved it by changing Zip64Mode.Always by Zip64Mode.AsNeeded in the step when i create the zip file, so this looks like this:

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

Then this line of code starts to work:

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

By the way, using Java 8.

Vikcen
  • 153
  • 2
  • 9
0

Large file (4GB+) support for zip archives (i.e. 64-bit zip support) was addressed by issue JDK-4681995 ("Add support for large (> 4GB) zip/jar files").

However, this change was not included in Java 7 until 1.7.0 build 55, which was a few builds after the specific version (1.7.0 build 40) that you were using. Updating to build 55 or later would solve the problem.

Parker
  • 7,244
  • 12
  • 70
  • 92
-1

It is problem of configuration for maven compiler in your pom file. Default version java source and target is 1.5, even used JDK has higher version.

To fix, add maven compiler plugin configuration section with higher java version, example:

<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>

For more info check these links:

maven compiler

bug report

harvyS
  • 628
  • 7
  • 9