IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

ZipException : error in opening zip file


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Par défaut ZipException : error in opening zip file
    Salut tout le monde,

    j'ai besoin de creer un fichier zip en Java. Je dois zipper le contenu d'un repertoire (fichier + sous-repertoires). J'utilise une fonction recursive.

    Mon fichier zip est bien creer, lorque je l'ouvre/le decompresse avec winrar, winzip, tout marche bien, idem en ligne de commande sous linux (unzip).

    Le probleme est que j'ai besoin de reouvrir ce zip en java, et la c'est le drame:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    java.util.zip.ZipException: error in opening zip file
            at java.util.zip.ZipFile.open(Native Method)
            at java.util.zip.ZipFile.<init>(ZipFile.java:203)
            at java.util.zip.ZipFile.<init>(ZipFile.java:234)
            ...
    Voila le code de ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    public void zipContent()
        {
           ZipOutputStream zipout;
            try
            {
                zipout = new ZipOutputStream("destination zip file");
     
                zipDir("main source directory", zipout, "");
                zipout.close();
            }
            catch (FileNotFoundException e)
            {
                e.printStackTrace();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
        }
     
        private void zipDir(String source, ZipOutputStream zipout, String relativeDir) throws IOException
        {
            File zipDir = new File(source);
            String[] dirList = zipDir.list();
            byte[] readBuffer = new byte[2156];
            int bytesIn = 0;
     
            // Loop through dirList, and zip the files.
            for (int i = 0; i < dirList.length; i++)
            {
                File f = new File(zipDir, dirList[i]);
                if (f.isDirectory())
                {
                    // If the File object is a directory, call this
                    // function again to add its content recursively.
                    String filePath = f.getPath();
     
                    String name = f.getName();
                    if (!name.endsWith("/"))  name += "/";
     
                    zipEntries.put(name, name);
     
                    if (relativeDir.equals(""))
                    {
                        ZipEntry anEntry;
                        anEntry = new ZipEntry(name);
     
                        zipout.putNextEntry(anEntry);
                        zipout.closeEntry();
     
                        zipDir(filePath, zipout, name);
                    }
                    else
                    {
                        ZipEntry anEntry;
     
                        if (!relativeDir.endsWith("/"))
                            relativeDir += "/";
     
                        anEntry = new ZipEntry(relativeDir + name);
     
                        zipout.putNextEntry(anEntry);
     
                        zipDir(filePath, zipout, relativeDir + name);
                    }
     
                    // Loop again.s
                    continue;
                }
     
                // Create a FileInputStream on top of f.
                FileInputStream fis = new FileInputStream(f);
                ZipEntry anEntry;
                if ((!relativeDir.endsWith("/")) && (!relativeDir.equals("")))
                    relativeDir += "/";
                if (!relativeDir.equals(""))
                {
                    anEntry = new ZipEntry(relativeDir + f.getName());
                 }
                else
                {
                    anEntry = new ZipEntry(f.getName());
                }
     
                // Place the zip entry in the ZipOutputStream object.
                zipout.putNextEntry(anEntry);
                zipEntries.put(anEntry.getName(), anEntry.getName());
     
                // Now write the content of the file to the ZipOutputStream.
                while ((bytesIn = fis.read(readBuffer)) != -1)
                {
                    zipout.write(readBuffer, 0, bytesIn);
                }
     
                // Close the Stream.
                zipout.closeEntry();
                fis.close();
            }
        }
    Voila le code que j'utilise pour lire le fichier zip:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     try
            {
                ZipFile zip = new ZipFile(zipFile);
                Enumeration zipEnum = zip.entries();
     
                while (zipEnum.hasMoreElements())
                {
                    ZipEntry item = (ZipEntry) zipEnum.nextElement();
     
                    // Directory case.
                    if (item.isDirectory())
                    {
                        File newdir = new File(unzippedFilesDir + "/" + item.getName());
                        newdir.mkdir();
                    }
                    // File case.
                    else
                    {
                        String newfile = unzippedFilesDir + "/" + item.getName();
                        InputStream is = zip.getInputStream(item);
                        FileOutputStream fos = new FileOutputStream(newfile);
                        int ch;
     
                        while ((ch = is.read()) != -1)
                        {
                            fos.write(ch);
                        }
                        is.close();
                        fos.close();
                    }
                }
                zip.close();
            }
            catch (Exception e)
            {
                System.out.println(e);
                e.printStackTrace();
            }
    L'exception est levée sur la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZipFile zip = new ZipFile(zipFile);
    Est-ce que vous voyez quelque chose qui vous parait bizarre?
    Je suis sur ce probleme depuis plusieurs jours et la je desespere...

    Merci,
    Phil

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Par défaut
    D'apres ce que je vois, tu ferme bien tes flux

    est ce que la variable zipFile pointe bien vers le fichier ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Par défaut
    Oui, elle pointe bien vers le fichier (j'aurais une FileNotFoundException si c'était pas le cas non?).
    Pas d'autre idée?

  4. #4
    Membre chevronné Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Par défaut
    caractères accentués?

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 24
    Par défaut
    Salut,
    j'ai finalement résolu mon problème. En fait il n'y avait pas d'erreur dans ma façon de zipper/dézipper. C'est la façon dont je sauvais le fichier à dézipper qui n'était pas bonne. Je reçoit ce fichier par Web Service avec attachement et je manipule à un moment un DataHandler. Pour sauvé mon fichier, je faisais un getStream() sur ce DataHandler et lisais le contenu dans une boucle en le réécrivant dans un File. Hors il se trouve que le DataHanlder proposait une méthode writeTo() qui fait tout le travail, et comme il faut puisque tout marche en utilisant cette méthode...
    Merci pour votre aide,
    phil

Discussions similaires

  1. java.util.zip.ZipException: error in opening zip file
    Par stephane.combes dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 21/12/2009, 11h09
  2. [Tomcat 5.0.28] ZipException: Too many open files
    Par maloups dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 14/11/2008, 16h47
  3. [PPT 2007] Error:PowerPoint could not open the file en VBS
    Par M4st4h dans le forum VBA PowerPoint
    Réponses: 5
    Dernier message: 06/10/2008, 17h21
  4. Réponses: 3
    Dernier message: 10/10/2007, 09h52
  5. [FLASH 8] An error has occured opening the file?
    Par baleiney dans le forum Flash
    Réponses: 1
    Dernier message: 16/07/2006, 22h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo