Unzip - dézipeur

Soyez le premier à donner votre avis sur cette source.

Vue 8 899 fois - Téléchargée 371 fois

Description

Programme permettant le déziper un zip avec une sous arborescence dans le zip.

Source / Exemple :


import java.io.*;
import java.util.*;
import java.util.zip.*;

public class UnZipPerso {

  static final int BUFFER = 2048;

  public UnZipPerso(String path) {
    try {

      // préparation du zip
      BufferedOutputStream dest = null;
      BufferedInputStream is = null;
      ZipEntry entry;
      ZipFile zipfile = new ZipFile(path);
      Enumeration e = zipfile.entries();

      // recharche du nom du zip
      File pathNom = new File(path);
      String nomFichier = pathNom.getName();
      String nom = nomFichier.substring(0, nomFichier.length() - 4);
      //System.out.println(nom);

      // création du dossier racine
      File NOM = new File(nom);
      NOM.mkdir();

      // URL de base
      String URLbase = "." + "/" + nom ;

      // boucle d'extraction des fichiers
      while (e.hasMoreElements()) {

        // préparation du fichier courant à extraire
        entry = (ZipEntry) e.nextElement();
        String url = entry.getName();
        //System.out.println("Extracting: " + url);

        String URLfichier = URLbase + "/" + url;
        //System.out.println("URL: " + URLfichier);

        File URL = new File(URLfichier);

        if (isFile(URL.getName())) {
          // écriture du fichier (extraction)
          is = new BufferedInputStream
              (zipfile.getInputStream(entry));
          int count;
          byte data[] = new byte[BUFFER];
          FileOutputStream fos = new
              FileOutputStream(URLfichier);
          dest = new
              BufferedOutputStream(fos, BUFFER);
          while ( (count = is.read(data, 0, BUFFER))
                 != -1) {
            dest.write(data, 0, count);
          }
          dest.flush();
          dest.close();
          is.close();
        }
        else {
          // zone répértoire
          URL.mkdirs();
        }

      }
    }
    catch (Exception e) {
      e.printStackTrace();
    }

  }

  private boolean isFile (String nom) {
    for (int i=nom.length()-1; i>=0; i--) {

      if (nom.charAt(i) == '.' ) {
        return true;
      }

    }

    return false;
  }

  public static void main(String[] args) {
    String path = "./essai.zip";
    UnZipPerso unZip1 = new UnZipPerso(path);
  }

}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
17
Date d'inscription
jeudi 21 septembre 2006
Statut
Membre
Dernière intervention
2 avril 2009

Je me peret de poser une correction qui prend en compte les dossiers avec des "." et les extensions sans "."

import java.io.*;
import java.util.*;
import java.util.zip.*;


public class Unzip {

static final int BUFFER = 2048;

public Unzip(String path) {

try {

// préparation du zip
BufferedOutputStream dest = null;
BufferedInputStream is = null;
ZipEntry entry;
ZipFile zipfile = new ZipFile(path);
Enumeration e = zipfile.entries();

// recharche du nom du zip
File pathNom = new File(path);
String nomFichier = pathNom.getName();
String nom = nomFichier.substring(0, nomFichier.length() - 4);
//System.out.println(nom);

// création du dossier racine
File NOM = new File("../" + nom);
NOM.mkdir();


// URL de base
String URLbase = "../" + "." + "/" + nom ;

// boucle d'extraction des fichiers
while (e.hasMoreElements()) {

// préparation du fichier courant à extraire
entry = (ZipEntry) e.nextElement();
String url = entry.getName();
//System.out.println("Extracting: " + url);

String URLfichier = URLbase + "/" + url;
//System.out.println("URL: " + URLfichier);

//File URL = new File(URLfichier);

if (isFile(URLfichier)) {
// écriture du fichier (extraction)
is = new BufferedInputStream
(zipfile.getInputStream(entry));
int count;
byte data[] = new byte[BUFFER];
FileOutputStream fos = new
FileOutputStream(URLfichier);
dest = new
BufferedOutputStream(fos, BUFFER);
while ( (count = is.read(data, 0, BUFFER))
!= -1) {
dest.write(data, 0, count);
}
dest.flush();
dest.close();
is.close();
}
else {
// zone répértoire
File URL = new File(URLfichier);
URL.mkdirs();
}

}
System.out.println("Décompréssion terminée");
}
catch (Exception e) {
e.printStackTrace();
}

}

private boolean isFile (String nom) {
int i = nom.length();
if (nom.charAt(i-1) == '/' ) {
return false;
}
else{ return true;}
}

}
Messages postés
17
Date d'inscription
jeudi 21 septembre 2006
Statut
Membre
Dernière intervention
2 avril 2009

Bonjour,

3 ans aprés ce code sert encore ;)
ALors à moins qu'il n'existe une nouvelle librairies qui unzip facilement je vais utiliser celui-là :).
Par contre un petit bug : si un dossier contient un point, le traitement le prend pour un fichier et donc ça fout un peu le brin. Il doit bien y avoir une autre solution pour tester si le fichier es t bien eun fichier et non un dossier?
Messages postés
16
Date d'inscription
lundi 29 septembre 2003
Statut
Membre
Dernière intervention
21 novembre 2005

Il faut mettre l'url de ton fichier zip. exemple: c:/arborescence.../nom_du_zip.zip c'est tout.
Bonne utilisation.
Messages postés
11
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
5 mars 2007

bonjour,
que faut-il mettre comme path sous windows. Je n'arrive pas à le faire fonctionner.

cordialement.
Messages postés
184
Date d'inscription
mardi 8 juin 2004
Statut
Membre
Dernière intervention
28 avril 2009

Salut,
ta corriger le bug ??

Merci...
Afficher les 11 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.