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

Entrée/Sortie Java Discussion :

Décompresser Zip à partir d'un FileOutputStream


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut Décompresser Zip à partir d'un FileOutputStream
    Bonjour,

    Je récupère un tableau de byte[] contenant mon archive.
    Je l'ai donc transformé en FileOutputStream puis en ZipOutputStream
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     //On recréer un fichier archive à partir du tableau de byte[]
            FileOutputStream vFileOutputStream = new FileOutputStream(System.getProperty("java.io.tmpdir"));
            vFileOutputStream.write(aTableauADezipper);
     
            ZipOutputStream vOutputStream = new ZipOutputStream(vFileOutputStream);
    J'aurai maintenant besoin d'un coup de pouce pour savoir comment faire pour dézipper mon fichier dans un endroit spécifique (j'ai le path déjà où décompresser l'archive) mais je suis un peu bloquée.

    Une idée ?

    Merci

  2. #2
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut
    J'ai un peu avancé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //On recréer un fichier archive à partir du tableau de byte[]
            String vCheminZipTemporaire = new String(System.getProperty("java.io.tmpdir") + "\\" + "archiveTemporaire.zip");
            FileOutputStream vFileOutputStream = new FileOutputStream(vCheminZipTemporaire);
            ZipOutputStream vOutputStream = new ZipOutputStream(vFileOutputStream);
     
            vOutputStream.write(aTableauADezipper);
    Mais j'ai une belle erreur sur la dernière ligne. Pourtant mon tableau de byte[] a été transformé en byte[] à partir d'un zip juste avant ???

    java.util.zip.ZipException: no current ZIP entry
    at java.util.zip.ZipOutputStream.write(ZipOutputStream.java:267)
    at java.io.FilterOutputStream.write(FilterOutputStream.java:80)

  3. #3
    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 : 44
    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
    J'ai mis en PJ une source comportant l'essentiel pour zipper dézipper.

    http://www.developpez.net/forums/sho...d.php?t=361749

  4. #4
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut
    Citation Envoyé par billynirvana
    J'ai mis en PJ une source comportant l'essentiel pour zipper dézipper.

    http://www.developpez.net/forums/sho...d.php?t=361749
    Merci

    Par contre, je suis remontée un peu et mon soucis vient du faire que quand je créer mon tableau de byte[] (méthode ci dessous) je crée un tableau de byte d'un FILE et non pas d'un ZIPFILE

    Mais à ce moment là, (si je mets un zipfile au lieu d'un file), comment faire pour créer un BufferedInputStream à partir du ZipFile ?

    Merci


    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
     /**
         * Retourne un tableau de byte du dossier à archiver (zip) dont le chemin est à passer en paramètre
         * @param String chemin du dossier a archiver
         * @param String chemin de la source en relatif
         * @param String chemin du fichier temporaire en xml contenant l'écran au format XML qui sera ajouté au zip dans le dossier racine \EcranXML
         * @return byte[] archive en tableau de byte
         * @throws SauvegardeBaseException 
         * @throws IOException 
         */
        public static byte[] genererArchive(String aCheminFichierAZipper, String vCheminSource, String aFichier) throws SauvegardeBaseException,
                                                                                                                IOException
        {
            byte[] vTableauArchiveRetour = null;
     
            //Generation du fichier zip dans un répertoire temporaire
            File vFichierCheminSource = new File(vCheminSource);
     
            String vPathCheminSource = vFichierCheminSource.getParent();
     
            vPathCheminSource = vPathCheminSource.substring(1, vPathCheminSource.length());
     
            String vRepertoireTemporaire = System.getProperty("java.io.tmpdir") + vPathCheminSource;
     
            List<FichierArchive> vListFicherArchive = new ArrayList<FichierArchive>();
            vListFicherArchive.add(new FichierArchive(aFichier, "EcranXML"));
     
            String vRacine = new File(aCheminFichierAZipper).getParent();
            for (String vElementAArchiver : new File(new File(aCheminFichierAZipper).getParent()).list())
            {
     
                //on test si l'élément trouvé est un fichier ou un dossier.
                //si s'est un fichier, on l'ajoute à la liste, si s'est un dossier on le parcourt pour l'ajouter à la liste
                vListFicherArchive = listeRepertoire(vRacine, vElementAArchiver, vFichierCheminSource, vListFicherArchive);
            }
     
            File vFichierTemporaire = new File(vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
            if (!vFichierTemporaire.exists())
            {
                new File(vFichierTemporaire.getParent()).mkdirs();
            }
            FileUtils.genererArchive(vListFicherArchive, vFichierTemporaire);
     
            File vFichierTemporaireARetourner = new File(vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
            //Récupération du zip crée et transformation en tableau de byte[]
     
            // On crée un tableau de byte avec une longueur égal à la taille du fichier
            vTableauArchiveRetour = new byte[(int) vFichierTemporaireARetourner.length()];
            // on crée un BufferedInputStream, qui va nous permettre de lire plusieurs byte d'un coup 
            BufferedInputStream in = new BufferedInputStream(new FileInputStream(vFichierTemporaireARetourner));
            // On lit la totalité du ficher.
            //Le premier paramètre est le tableau de byte qui va recevoir les données,
            //le deuxième est la position dans le fichier où on commence à lire les données (donc zéro puisqu'on commence au début du fichier),
            //enfin le dernier paramètre est le nombre d'octet que l'on veut lire
            in.read(vTableauArchiveRetour, 0, (int) vFichierTemporaireARetourner.length());
     
            return vTableauArchiveRetour;
        }

  5. #5
    Membre Expert Avatar de nebule
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    1 507
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 507
    Par défaut
    Bon

    finalement soucis précédent résolu.

    J'ai fait ça

    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
      FileUtils.genererArchive(vListFicherArchive, vFichierTemporaire);
     
            ZipFile vFichierTemporaireARetourner = new ZipFile(vRepertoireTemporaire + "\\archiveExportDonneesTemporaire.zip");
            //Récupération du zip crée et transformation en tableau de byte[]
            ZipEntry vZipEntry = new ZipEntry(vFichierTemporaireARetourner.getName());
     
            // On crée un tableau de byte avec une longueur égal à la taille du fichier
            vTableauArchiveRetour = new byte[(int) vFichierTemporaireARetourner.size()];
            // on crée un BufferedInputStream, qui va nous permettre de lire plusieurs byte d'un coup 
            BufferedInputStream in = new BufferedInputStream(vFichierTemporaireARetourner.getInputStream(vZipEntry));
            // On lit la totalité du ficher.
            //Le premier paramètre est le tableau de byte qui va recevoir les données,
            //le deuxième est la position dans le fichier où on commence à lire les données (donc zéro puisqu'on commence au début du fichier),
            //enfin le dernier paramètre est le nombre d'octet que l'on veut lire
            in.read(vTableauArchiveRetour);
     
            return vTableauArchiveRetour;
    Par contre nouveau soucis mais avec le bufferedinputstream.read donc je vais poster un autre message.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD17] Décompression Zip avec améliorations
    Par squall049 dans le forum WinDev
    Réponses: 2
    Dernier message: 28/03/2013, 20h21
  2. Décompression Zip : connaitre l'avancement ?
    Par borozhim dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 08/07/2010, 11h24
  3. Download fichier zip à partir d'un url (http)
    Par kenada dans le forum ASP
    Réponses: 5
    Dernier message: 04/05/2007, 19h07
  4. algorithme de décompression ZIP
    Par alain77 dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 04/01/2007, 10h23
  5. Problème lors de décompression zip
    Par LuckyLuke56 dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 19/10/2006, 00h39

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