J'utilise Java 1.7.0_40 sur Red Hat Linux et j'ai le code suivant:
Path zipfile = Paths.get(filename);
FileSystem fs = FileSystems.newFileSystem(zipfile, FileTest.class.getClassLoader());
La variable filename
pointe vers un fichier Zip de 788 Mo. La taille non compressée du fichier Zip est de 8,3 Go. Lorsque j'exécute le code ci-dessus, j'obtiens l'exception suivante:
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)
J'avais l'impression que Java 7 était capable de gérer de gros fichiers Zip. Quelqu'un peut-il expliquer pourquoi cela se produit?
Merci.
Moi aussi, j'ai fait face au problème dans un projet basé sur Maven. Le problème s'est produit en raison de pots corrompus. Supprimé les bocaux du dossier .m2 et reconstruit le projet; et cela a fonctionné comme un charme.
Ce problème se produit car le fichier jar a été téléchargé est corrompu.
Il y a deux explications possibles:
Vous avez un fichier Zip corrompu - Erreur de compilation dans maven2: "en-tête CEN invalide (mauvaise signature)"
C'est quelque chose à voir avec Zip-64:
Java.util.Zip.ZipException: en-tête CEN non valide (mauvaise signature)
Mais notez également que le support Zip-64 n'a apparemment été ajouté que dans 1.7.0_b55 ... https://blogs.Oracle.com/xuemingshen/entry/Zip64_support_for_4g_zipfile
Le support des fichiers volumineux (4 Go +) pour les archives Zip (c'est-à-dire le support Zip 64 bits) a été résolu par le problème JDK-4681995 ( "Ajouter un support pour les grands fichiers (> 4 Go) Fichiers Zip/jar ").
Cependant, cette modification n'était pas incluse dans Java 7 jusqu'à 1.7.0 build 55, qui était quelques builds après la version spécifique (1.7.0 build 40) que vous utilisiez. Mise à jour pour construire 55 ou plus tard résoudrait le problème.