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

API standards et tierces Java Discussion :

Compression avec l’API Zip de Java


Sujet :

API standards et tierces Java

  1. #1
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut Compression avec l’API Zip de Java
    Bonjour à tous :
    Je debute "toujours" avec java et j'ai le problème suivant
    J'ai utilisé l'excellent tuto de Hugo ETIEVANT pour me familiariser avec les fichiers zip en java . http://cyberzoide.developpez.com/java/zip/
    Cependant j'ai le soucis suivant avec la class unzip : dans le cas ou le fichier zip contient des repertoires et sous repertoires , j'ai le message d'erreur suivant (uniquement si les repertoires n'existent pas encore)
    P:\TEST>java unzip RET\toto.zip
    Extracting: fichier1.xml
    Extracting: jsp/include/fichier2.jsp
    java.io.FileNotFoundException: jsp\include\fichier2.jsp (Le chemin d'accès spécifié est introuvable)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:70)
    at unzip.main(unzip.java:59)
    Que faut il modifier ou ajouter à la class "unzip" pour creer aussi les sous repertoires si besoin

    Merci de votre aide
    @argoet


    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
    import java.io.*;
    import java.util.*;
    import java.util.zip.*;
    import java.util.Enumeration;
     
    /**
     * Classe de création d'une archive Zip
     * à partir des fichiers du répertoire courant.
     *
     * D'après un exemple de la documentation officielle Java Sun
     * http://java.sun.com/developer/technicalArticles/Programming/compression/
     *
     * Author: Hugo ETIEVANT
     */
    public class unzip {
     
    	/**
             * Taille générique du tampon en lecture et écriture
             */
    	static final int BUFFER = 2048;
     
    	/**
             * Programme principal.
             */
    	public static void main (String argv[]) {
     
       		/*************
                     * Décompression
                     *************/
     
    		try {
     
    			// fichier destination
    			BufferedOutputStream dest = null;
     
    			// ouverture fichier entrée
    			FileInputStream fis = new FileInputStream(argv[0]);
     
    			// ouverture fichier de buffer
    			BufferedInputStream buffi = new BufferedInputStream(fis);
     
    			// ouverture archive Zip d'entrée
    			ZipInputStream zis = new ZipInputStream(buffi);
     
    			// entrée Zip
    			ZipEntry entry;
     
    			// parcours des entrées de l'archive
    			while((entry = zis.getNextEntry()) != null) {
     
    				// affichage du nom de l'entrée
    				System.out.println("Extracting: " +entry);
     
    				int count;
    				byte data[] = new byte[BUFFER];
     
    				// création fichier
    				FileOutputStream fos = new FileOutputStream(entry.getName());
     
    				// affectation buffer de sortie
    				dest = new BufferedOutputStream(fos, BUFFER);
     
    				// écriture sur disque
    				while ((count = zis.read(data, 0, BUFFER)) != -1) {
    					dest.write(data, 0, count);
    				}
     
    				// vidage du tampon
    				dest.flush();
     
    				// fermeture fichier
    				dest.close();
    			}
     
    			// fermeture archive
    			zis.close();
     
    		} catch(Exception e) {
    			e.printStackTrace();
    		}
     
     
    	}

  2. #2
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Avant la construction de ton flux d'écriture, construit un java.io.File avec le nom du fichier zip à créer, puis créer les répertoires :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    File fichier = new File( entry.getName() );
    fichier.mkdirs();
    N'oublie pas le 's' à mkdirs, il te permet de créer toute l'arborescence des répertoires. Ensuite, tu peux reprendre le cours normal de l'appli avec la création du flux d'écriture...

  3. #3
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Sauf qu'en faisant cela : il créé un repertoire avec le nom du fichier . et l'extraction du fichier plante puisque un repertoire existe déja avec le meme nom
    Il semble qu'il faille :
    1 - analyser le nom du fichier (Si c'est un fichier ou un repertoire) ?
    2 - faire un mkdirs du "dirname" du fichier


    J'avais esperé quelque chose de plus simple mais simplicité ne rime toujours pas avec java

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Citation Envoyé par argoet Voir le message
    J'avais esperé quelque chose de plus simple mais simplicité ne rime toujours pas avec java
    Tu exagères, là
    Voici le code modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    File fichier = new File( entry.getName() );
    if( fichier.isFile() )
    {
      fichier.getParentFile().mkdirs();
    }

  5. #5
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Merci à vous "dinobogan"

    Et oui je l'avoue j'ai un peu exagéré sur ce coup là

    Je tag ==>

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

Discussions similaires

  1. créer un zip en java avec un code pour y acceder
    Par titi42 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/08/2009, 23h43
  2. [PHP 5.0] Compression de répertoire avec bibliothèque ZIP
    Par keaton7 dans le forum Langage
    Réponses: 7
    Dernier message: 03/03/2009, 13h28
  3. Documentation sur la manière de travailler avec le XML en java
    Par DelPiero62 dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 26/03/2003, 09h16

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