Je suis en train de m'amuser un peu avec ce code la. Je voudrais voir si
c'est possible de dezipper le contenu d'un fichier de l'archive dans une
String (l'idee etant de passer cette String ensuite a un StringReader pour
parser le contenu du fichier). Apparemment ma fonction marche bien, si je
fais un System.out.println de la String dans la fonction ca marche. Par
contre la valeur retournee est nulle... Des idees? Mon fichier test.txt est
plutot petit donc je ne pense pas que ca soit un probleme du a un fichier
enorme. Je pencherai plutot vers un probleme du au fait que le contenu de
mon StringBuffer n'est pas garde dans la memoire quand le ZipInputStream est
ferme...

Voir code plus bas pour plus de detail:

quand j'appelle:

System.out.println(ZipUtil.getFileFromZip("toto\\test.txt", "toto.zip"));
il m'affiche null.
Ca c'est le code de ma fonction getFileFromZip:

public static String getFileFromZip (String file, String zipFile)
{
        InputStream is = null;
        ZipInputStream zip = null;
        try {
            ZipEntry ze;
            is = new BufferedInputStream(new FileInputStream(zipFile));
            if (is != null) {
                zip = new ZipInputStream(is);
                ze = zip.getNextEntry();
                while (ze != null) {
                    String fileinZip = ze.getName();
                    fileinZip = fileinZip.replace('/', File.separatorChar);
                    if (fileinZip.equals(file)) {
                        int count;
                        byte a_b[];
                        StringBuffer buffer = new StringBuffer();

                        a_b = new byte[512];
                        count = zip.read(a_b);
                        while (count != -1) {
                            String s = new String(a_b, 0, count);
                            buffer.append(s);
                            count = zip.read(a_b);
                        }
                                System.out.println(buffer.toString()); // La
ca marche...
                        return buffer.toString();
                    }
                    else {
                        ze = zip.getNextEntry();   
                    }
                }
                return null;
            }
        }
        catch (IOException ioe) {
            ioe.printStackTrace();
        }
        finally {
            try {
                if (is != null) { 
                    is.close();
                }    
                if (zip != null) {
                    zip.close();
                }
            }
            catch (IOException ioe) {
            }
            return null;
        }
    }

-----Original Message-----
From: Herve AGNOUX [mailto:[EMAIL PROTECTED]]
Sent: Friday, February 01, 2002 2:44 AM
To: [EMAIL PROTECTED]
Subject: Re: [Zip]


Le 1 Feb 2002 Cyriaque Dupoirieux a �crit :

> Bonjour,
> 
>     Auriez-vous des exemples de manipulations de fichiers zip en java
>     ?
> 

Voici un extrait de ma prose sur le sujet. Il s'agit d'une op�ration 
de d�zippage. Je me suis astreint � mettre des commentaires, pour 
essayer de comprendre ce que j'avais fait. C'est du jdk1.1.8. Pour 
mes petites affaires, il s'agissait de mettre en place la 
configuration de base d'une application, configuration pr�sente zipp� 
dans le .jar de cette appli.


  private void d�zipeConfigBase() throws IOException
  {
    InputStream is;
    ZipInputStream zip;

    is = null;
    zip = null;
    try
      {
          ZipEntry ze;
          File base;

        // base est le repertoire destination
          base = maBase.r�pertoire();

        // la ressource configbase.zip est le zip origine.
        is = getClass().getResourceAsStream("configbase.zip");

        if (is != null)
          {
            zip = new ZipInputStream(is);
            ze = zip.getNextEntry();

        // tant que on n'a pas fait tout les entrees du zip...
            while (ze != null)
              {
                String filename;
                File destFile;

                        // on prend le nom de l'entree, et on remplace les
etapes
                        // du chemin par / ou \ ou ...
                filename = ze.getName();
                filename = filename.replace('/', File.separatorChar);
                destFile = new File(base, filename);

                if (destFile.exists())
                  System.out.println("install : conserve "+destFile);
                else
                  {
                    System.out.println("install : ecriture 
"+destFile);

                                // si l'entree est un repertoire, on cree le
repertoire
                    if (ze.isDirectory())
                      destFile.mkdirs();
                    else
                      {
                                        // sinon, on cree le fichier.
                        String parent;
                        OutputStream out;
                        int count;
                        byte a_b[];

                                        // on verifie si le repertoire
parent du fichier existe, 
                                        // sinon on le cree
                        parent = destFile.getParent();
                        if (parent != null)
                          {
                            File parentFile;

                            parentFile = new File(parent);
                            if (!parentFile.exists())
                              parentFile.mkdirs();
                          }

                                        // ouverture du flux de destination
                        out = new FileOutputStream(destFile);

                                        // et on fait le transfert par pas
de 512 octets.
                        a_b = new byte[512];
                        count = zip.read(a_b);
                        while (count != -1)
                            {
                                out.write(a_b, 0, count);
                                count = zip.read(a_b);
                            }
                        out.close();
                      }
                  }

                        // en avant pour le prochain fichier compresse !
                ze = zip.getNextEntry();
              }
          }
        else
          System.out.println("pas de zip des repertoires ?");
      }
    finally
      {
        if (is != null) is.close();
        if (zip != null) zip.close();
      }
  }

Et voil� !

<pub>
C'est un extrait de notre produit "diaam auteur", dont vous pouvez 
t�l�charger le exe d'install � 
http://www.diaam.com/telechargement.html et qui contient les sources 
:-)
</pub>


Sinon, il y a une tache Ant pour ziper/deziper. Peut-�tre pourrais-tu 
la r�utiliser ?


--
Sur le Web, tout de suite.
Herve AGNOUX - diaam informatique
http://www.diaam-informatique.com


Répondre à