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 :

Problème extraction fichier d'un zip


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut Problème extraction fichier d'un zip


    J'ai un soucis avec mon code d'extraction de fichiers d'un fichier zip. Certains fichiers extraits ne sont pas entier et je n'arrive pas à voir pourquoi.

    Voici la fonction correspondante :

    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
    public static void unzip (File zipfile) {
    		ZipInputStream zis = null;
    		ZipEntry ze = null;
    		OutputStream fos = null;
    		File folder = null;
     
    		try {
    			zis = new ZipInputStream (new BufferedInputStream (new FileInputStream (zipfile.getCanonicalFile ())));
    			folder = new  File ("./tmp/");
     
    			while ((ze = zis.getNextEntry ()) != null) {
    				File f = new File (folder.getCanonicalPath (), ze.getName ());
     
    				if (ze.isDirectory ()) {
    					f.mkdirs ();
    					continue;
    				}          
    				f.getParentFile ().mkdirs ();
     
    				fos = new BufferedOutputStream (new FileOutputStream (f));
     
    				byte[] buf = new byte[(int)ze.getSize ()];
    				int bytesRead;
     
    				while (-1 != (bytesRead = zis.read (buf))) {
    					fos.write (buf, 0, bytesRead);
    				}
     
    				buf = null;
    				f = null;
    			}
     
    			File[] listFiles = folder.listFiles ();
     
    			for (int i = 0;i < listFiles.length;i++) {
    				if (!listFiles[i].getName ().substring (listFiles[i].getName ().length () - 3, listFiles[i].getName ().length ()).equals ("xml")) {
    					listFiles[i].delete ();
    				}
    			}
    		}
    		catch (FileNotFoundException e) {
    			system.out.println("FileNotFoundError");
    		} 
    		catch (IOException e) {
    			system.out.println("IOError");
    		}
    		catch (SecurityException e) {
    			system.out.println("SecurityError");
    		}
    		finally {
    			try {
    				fos.close ();
    				zis.close ();
    			} 
    			catch (IOException e) {
    				system.out.println("IOError");
    			}
    		}
    	}
    Avez-vous une idée de ce que j'aurais pu mal faire pour que ce problème ce produise ?

    d'avance

  2. #2
    Membre confirmé Avatar de dark.jabberwock
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Bonjour,

    Juste après ta boucle :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    while (-1 != (bytesRead = zis.read (buf))) {
    	fos.write (buf, 0, bytesRead);
    }

    Je pense que tu devrais rajouter : fos.flush();

  3. #3
    Expert confirmé

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Par défaut
    Exact c'était bien cela

    à toi

  4. #4
    Membre confirmé Avatar de dark.jabberwock
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    De rien, ça m'est arrivé plusieurs fois d'oublier un "flush" sur un OutputStream. Je commence à être rodé

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

Discussions similaires

  1. [Python 2.X] Problème extraction fichier
    Par franck10 dans le forum Général Python
    Réponses: 1
    Dernier message: 16/03/2015, 14h21
  2. Réponses: 7
    Dernier message: 06/05/2014, 16h31
  3. Problème extraction d'un fichier binaire
    Par rayon-gama dans le forum Général Java
    Réponses: 23
    Dernier message: 05/04/2013, 09h08
  4. Réponses: 6
    Dernier message: 04/01/2011, 22h38
  5. problème extraction de données un fichier sas
    Par aristayeta1974 dans le forum Macro
    Réponses: 1
    Dernier message: 12/05/2009, 23h40

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