OK, pas la peine de s'enerver... J'avais pas vu le "return null;" dans ma clause "finally" ;-)
Nicolas -----Original Message----- From: Nicolas Sallembien [mailto:[EMAIL PROTECTED]] Sent: Thursday, February 14, 2002 12:37 PM To: '[EMAIL PROTECTED]' Subject: RE: [Zip] 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
