8 votes

Décompression du fichier Zip Exception : taille d'entrée invalide (attendu 193144 mais obtenu 193138 octets)

J'essaie de décompresser un fichier (récupéré sur un serveur FTP) :

ZipInputStream zis = new ZipInputStream(
    new FileInputStream(zipFile));
    ZipEntry ze = zis.getNextEntry();
    while (ze != null) {
        String fileName = ze.getName();
        File newFile = new File(outputFileName+outputFolder + File.separator + fileName);
        System.out.println("file unzip : " + newFile.getAbsoluteFile());
        FileOutputStream fos = new FileOutputStream(newFile);
        int len;
        while ((len = zis.read(buffer)) > 0) {
            fos.write(buffer, 0, len);
        }
        fos.close();
        sendFile = newFile;
        ze = zis.getNextEntry();
    }
    zis.closeEntry();
    zis.close();
    System.out.println("Done");

Je n'ai qu'un seul fichier texte dans le fichier .zip. Ce code fonctionne bien sur ma machine Windows locale. Cependant, lorsqu'il est déployé sur un serveur Ubuntu, il génère l'exception suivante

java.util.zip.ZipException: invalid entry size (expected 193144 but got 193138 bytes)
at java.util.zip.ZipInputStream.readEnd(ZipInputStream.java:386)
at java.util.zip.ZipInputStream.read(ZipInputStream.java:156)
at java.io.FilterInputStream.read(FilterInputStream.java:90)

at com.empress.Xsync.updater.ClientConfiguration.unZipFile(ClientConfiguration.java:246)

Je l'ai décompressé manuellement ça marche bien. La taille du fichier .txt original est de 193144 octets.

18voto

Stephen C Points 255558

Il semble que votre fichier zip ait été corrompu lors du processus de transfert vers la machine Ubuntu. Essayez de décompresser le même fichier à partir de la ligne de commande sur la machine Ubuntu pour voir si elle signale également des problèmes.

Si je devais faire une supposition au hasard, ce serait que vous avez transféré le fichier ZIP par FTP et que vous avez utilisé le mode "ascii" au lieu du mode "binaire". (FTP aurait pu convertir '\r\n' à '\n' six fois ...)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X