begin process at 2010 02 10 05:45:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

JAVA / J2EE / J2ME

 > 

Divers

 > 

Débutant(e)

 > 

Choisir la destination de décompression d'un zip <JAVA>


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Choisir la destination de décompression d'un zip <JAVA>

jeudi 27 septembre 2007 à 06:57:44 | Choisir la destination de décompression d'un zip <JAVA>

alex75000

Bonjour à tous, je suis là-dessus depuis un moment(et j'ai l'impression que c'est quelque chose de très idiot...comme la majorité des erreurs que je fais) lol.

Eh ben voilà, je fais en ce moment une petite application de compression et de décompression de fichier et, par une version ou par l'autre...je n'arrive tout simplement pas à faire en sorte que l'on puisse Choisir(par un arbre ou un chooser par exemple) le dossier où les fichiers seront décompressés, je me disais que vous pouriez sans doute m'aider, me donner des conseils etc.


Voici   les deux versions du code qui me permet de faire cela(C'est au clic sur un bouton que le tout se produit)

 try
      {
     //Config du FileChooser
        choixFichier.setFileFilter(new ZipFilter());
        choixFichier.setMultiSelectionEnabled(false);
        choixFichier.setFileSelectionMode(JFileChooser.FILES_ONLY);
        choixFichier.showOpenDialog(this);
        String zipName;
  
         zipName=choixFichier.getSelectedFile().getPath();
 
         BufferedOutputStream dest =null;    //Destination
         FileInputStream archive= new FileInputStream(zipName);
       //On ouvre le fichier et on ouvre le buffer pour le fichier à  décompresser!
         BufferedInputStream bufFich = new BufferedInputStream(archive);
    //Ouverture du fichier avec le buffer
         ZipInputStream zIS = new ZipInputStream(bufFich);  
    //Parcourir les entrées du zip
         ZipEntry entree;  
         int count;
         while((entree = zIS.getNextEntry()) != null)
       {
      //Création du flux pour le fichier 
           FileOutputStream fOS = new FileOutputStream(entree.getName()); 
        // On affecte un buffer au flux  
           dest = new BufferedOutputStream(fOS, BUFFER);
         // On écrit sur le disque
           while ((count = zIS.read(data, 0, BUFFER)) != -1)
            {   
              dest.write(data, 0, count);   
            } 
          // On vide le tampon
           dest.flush();
         // On ferme le fichier créé  
          dest.close();  
         }
       // On ferme l'archive 
            zIS.close();
     }
  catch (IOException e)
    {
      
     }

Façon 2:

 try
      { 
  //Config du FileChooser
        choixFichier.setFileFilter(new ZipFilter());
        choixFichier.setMultiSelectionEnabled(false);
        choixFichier.setFileSelectionMode(JFileChooser.FILES_ONLY);
        choixFichier.showOpenDialog(this);
        String zipName;

 //On signale une zipFile
  ZipFile zf = new ZipFile(zipName);  
      Enumeration listEntree = zf.entries();  //Une liste qui va contenir les entrées
      while (listEntree.hasMoreElements())
       { 
      //Tant qu'il y a des éléments dans la liste
          ZipEntry ze = (ZipEntry) e.nextElement();
      // System.out.println("Unzipping " + ze.getName());
          FileOutputStream fout = new FileOutputStream(ze.getName());
          InputStream in = zf.getInputStream(ze);  //Renvoie un InputStream pour une entrée de données!

          for (int c = in.read(); c != -1; c = in.read())
           {
             fout.write(c);
           }
          in.close(); //on ferme les flux
          fout.close();
       }
        catch (IOException e)
    {
      
     }


Pour le reste, ce sera revu et corrigé plus tard, mais c'est vraiment le détail du choix du dossier qui me chicote...car en ce moment, il ne fait qu'extraire dans le dossier où se trouve le programme.


Désolé pour la lisibilité, je ne suis pas habitué au forum et je n'ai pas remarqué une balise de code.

J'espère que ma question est claire, lol, je ne sais pas, je verrai j'imagine.

Merci à tous à l'avance!
jeudi 27 septembre 2007 à 09:43:45 | Re : Choisir la destination de décompression d'un zip <JAVA>

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

bon je suis de bonne humeur ce matin ^^ donc je vais te donner une solution à ton problème :

voici unelasse qui permet de compresser et decompresser (au format zip) :


public class ZIP {
    public static final int    MAX_PAQUET_SIZE    = 2048;
    private File                  src                              = null;
    private File                  dst                              = null;

    public ZIP(File src, File dst) {
        this.src = src;
        this.dst = dst;
    }
   
    public File getSource() {
        return src;
    }
   
    public File getDestination() {
        return dst;
    }

    private void zipDir(String dir2zip, ZipOutputStream zos) throws Exception {

        File zipDir = new File(dir2zip);
        String[] dirList = zipDir.list();
        byte[] readBuffer = new byte[MAX_PAQUET_SIZE];
        int bytesIn = 0;
        for (int i = 0; i < dirList.length; i++) {
        File f = new File(zipDir, dirList[i]);
        if (f.isDirectory()) {
            String filePath = f.getPath();
            zipDir(filePath, zos);
            continue;
        }
        String entryName = f.getAbsolutePath().substring(src.getParent().length() + 1);
        FileInputStream fis = new FileInputStream(f);
        ZipEntry anEntry = new ZipEntry(entryName);
        zos.putNextEntry(anEntry);

        while ((bytesIn = fis.read(readBuffer)) != -1)
            zos.write(readBuffer, 0, bytesIn);
        zos.closeEntry();
        fis.close();
    }

    public void compress(int level) throws Exception {
        level = (level < 0) ? 0 : (level > 9) ? 9 : level;
        if(!dst.exists())
            dst.createNewFile();
        ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dst));
        zos.setLevel(level);
        zipDir(src.getAbsolutePath(), zos);
        zos.flush();
        zos.close();
    }

    public void uncompress() throws Exception {
        ZipInputStream zis = new ZipInputStream(new FileInputStream(src));

        ZipEntry zen = null;
        if (!dst.exists())
            dst.mkdir();
        while ((zen = zis.getNextEntry()) != null) {
            if (zen.isDirectory())
                new File(dst.getAbsolutePath() + File.separator + zen.getName())
                        .mkdir();
            else {
                File f = new File(dst.getAbsolutePath() + File.separator
                        + zen.getName());
                if (!f.getParentFile().exists())
                    f.getParentFile().mkdirs();
                FileOutputStream out = new FileOutputStream(dst
                        .getAbsolutePath()
                        + File.separator + zen.getName());
                // transfere les byte compresse vers le fichier de sortie
                byte[] buf = new byte[MAX_PAQUET_SIZE];
                int offset;
                while ((offset = zis.read(buf)) > 0)
                    out.write(buf, 0, offset);
                out.close();
            }
        }
        zis.closeEntry();
        zis.close();
    }
}

Exemple d'utilisation :
[...]
try {
    ZIP zip = new ZIP(new File("monZip.zip"), new File("/home/twins/"));
    zip.uncompress();
} catch( Exception e) {
    e.printStackTrace();
}
[...]


au passage dans ton code oublies pas de faire un test sur la selection d'un fichier soit :

int ret = choixFichier.showOpenDialog(this);
if(ret == JFileChooser.APPROVE_OPTION) {
    File zipFile=choixFichier.getSelectedFile();
    [...]//decompression ou compression
}

------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
jeudi 27 septembre 2007 à 19:21:16 | Re : Choisir la destination de décompression d'un zip <JAVA>

alex75000

C'est une toute autre façon de faire, mais bon merci bien :)


Je n'arrive pas à décompresser un dossier...    J'imagine qu'on commence par


if (zIS.getNextEntry().isDirectory())
        Mais pour ce qui est du reste...lol.


Merci pour l'aide :)
jeudi 27 septembre 2007 à 22:59:17 | Re : Choisir la destination de décompression d'un zip <JAVA>

Twinuts

Membre Club Administrateur CodeS-SourceS
Salut,

regarde la méthode zipDir du code de mon ancien poste, cette méthode (récursive) permet la compression d'un répertoire contenant des fichiers et/ou des sous répertoires, etc...


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO


Cette discussion est classée dans : fichier, buffer, dest, choixfichier, zipname


Répondre à ce message

Sujets en rapport avec ce message

[java]creation de fichier ... [ par suber600 ] voila je dois creer un fichier composé d entier et de double. le fichier ne doit pas etre lisible par un editeur de texte comment dois je faire ? je v lire ligne dans un fichier txt [ par fafa00 ] Bonjour,J'ai un fichier txt qui contient plusieurs lignes.J'arrive à lire la première ou toutes les lignes, je voudrais pouvoir sélectionner juste une Optimiser un transfert de fichier [ par seareal ] Bonjour,J'effectue un transfert de fichiers par réseau et j'obtiens un débit approximatif de 3 Mo/s, alors que je suis censé pouvoir allé au-delà. Ci- problème de mémoire lors de chargement de fichier [ par jc_romeo ] BonjourJe voudrais savoir comment est ce que l'on peut stocker à partir d'un fichier excel beaucoup de données (3000 lignes * 300 colonnes) a peu pres Pb pour envoyer un fichier.... [ par egire ] bonjour, j'ai un petit problème en java pour envoyer un fichier, je vais vous éxpliquer : Le but est de faire un serveur et un client, le client deman Java : ecriture BOM ds fichier [ par cambouis ] Bonjour, Je travaille sur un projet de génération de diagramme dia à partir d'un fichier Excel. Afin d'être correctement interprété par Dia, le fichi comment recuperer le contenu d'un fichier sur le net [ par byob ] Bonjour,j'ai regarder de nombreux post sur le sujet pour m'en inspirer mais je n'arrive pas à qqc de concret.Ce que j'aimerais faire : lire les 128 pr coder une Image [ par aliahmad ] salutpublic static void decoderImage(String image,String fichier) throws Exception {    byte[] buffer = Base64.decode(image);    writeFile(buffer,fich afficher le decodage d'une image [ par aliahmad ] salut public static void decoderImage(String image, String fichier) throws Exception {    byte[] buffer = Base64.decode(image);    writeFile(buffer,fi J2ee Struts fichier [ par zarmas42 ] Bonjour,Dans le cadre d'un projet J2EE, je dois ouvrir un fichier qui est sur le serveur en java.Comment récupérer l'adresse complète de l'emplacement


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,328 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales