java extraire zip fin Inattendue de ZLIB flux d'entrée

Je suis entrain de créer un programme qui va extraire un zip et ensuite insérer les fichiers dans une base de données, chaque tellement souvent, je reçois le message d'erreur

java.lang.Exception: java.io.EOFException: Unexpected end of ZLIB input stream

Je ne peux pas identifier la raison de ce que l'extraction de code est à peu près la même chose que tous les autres codes que vous pouvez trouver sur le web. Mon code est comme suit:

public void extract(String zipName, InputStream content) throws Exception {

    int BUFFER = 2048;

    //create the zipinputstream 
    ZipInputStream zis = new ZipInputStream(content);

    //Get the name of the zip
    String containerName = zipName;

    //container for the zip entry
    ZipEntry entry;

    //Process each entry
    while ((entry = zis.getNextEntry()) != null) {

        //get the entry file name
        String currentEntry = entry.getName();

        try {

                ByteArrayOutputStream baos = new ByteArrayOutputStream();

                //establish buffer for writing file
                byte data[] = new byte[BUFFER];
                int currentByte;

                //read and write until last byte is encountered
                while ((currentByte = zis.read(data, 0, BUFFER)) != -1) {

                    baos.write(data, 0, currentByte);
                }

                baos.flush(); //flush the buffer 

                //this method inserts the file into the database
                insertZipEntry(baos.toByteArray());

                baos.close();

        } 
        catch (Exception e) {
            System.out.println("ERROR WITHIN ZIP " + containerName);
        }
    }
}
• Avez-vous vérifié que ZIP flux (fichier) vous essayez de traiter est valide (par exemple, unzip pouvez le décompresser)? • Veuillez repérer la ligne de code qui fait a soulevé l'exception.
Je ne peut pas se rappeler correctement mais n'êtes-vous pas censé fermer chaque entrée après le traitement?
Vous devez fermer le baos avant d'appeler insertZipEntry(), et notre "currentByte variable est mal nommée: "comte" ou similaire.
Pouvez-vous choisir une meilleure réponse à votre question?

OriginalL'auteur medium | 2011-11-10