Zipper un ensemble de fichiers en JAVA - sans la structure des répertoires

Bonjour,

J’ai crée une petite applet Java permettant àl’utilisateur de sélectionner les fichiers de son choix sur son disque, et réalisant automatiquement une archive contenant ces mêmes fichiers.
Je me suis pour cela inspiré de la doc de chez Sun qui aborde le sujet : Compressing and Decompressing

Le seul problème, c’est qu’une fois décompressé le .ZIP généré, je me suis aperçu que l’arborescence des fichiers était gardée intacte.
En résumé, j’aimerai qu’une fois décompressé, le .ZIP contienne l’ensemble des fichiers compressés à sa racine.

Cela est-il possible ?

Voilà la méthode en question, largement inspiré de l’exemple de chez SUN :

public void creationZip()
	 {
		 int BUFFER = 2048;
		 try {
	         BufferedInputStream origin = null;
	         FileOutputStream dest = new FileOutputStream("ready2send.zip");
	         ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
	         byte data[] = new byte[BUFFER];
	         for (int i=0; i<cheminsFichiers.length; i++) {
	            System.out.println("Adding: "+cheminsFichiers[i]);
	            FileInputStream fi = new FileInputStream(cheminsFichiers[i]);
	            origin = new BufferedInputStream(fi, BUFFER);
	            ZipEntry entry = new ZipEntry(cheminsFichiers[i]);
	            out.putNextEntry(entry);
	            int count;
	            while((count = origin.read(data, 0, 
	              BUFFER)) != -1) {
	               out.write(data, 0, count);
	            }
	            origin.close();
	         }
	         out.close();
	      } catch(Exception e) {
	         e.printStackTrace();
	      }
	 }	

A noter que c’est le tableau de strings cheminsFichiers qui contient l’ensemble des chemins absolus des fichiers à compresser.

Des idées ?

Merci d’avance :slight_smile:
Edité le 04/06/2009 à 11:35

Euh, essaie ca :

File file = new File(cheminsFichiers[i]);
FileInputStream fi = new FileInputStream(file);
ZipEntry entry = new ZipEntry(file.getName());

EDIT : dans chaque ligne du zip, le contenu ne sera associé qu’au nom du fichier originel; donc il ne devrait pas y avoir de chemin relatif au zip; utiliser java.io.File t’évitera de calculer à la main le nom du fichier.
Edité le 04/06/2009 à 10:47

Bon en fait j’ai résolu le problème. Voila la solution pour ceux que ça intéresse.
Ca se passe à cette ligne là :


ZipEntry entry = new ZipEntry(cheminsFichiers[i]);

entry correspond au chemin dans lequel sera stocké le fichier identifié par [i]cheminsFichiers au sein du fichier .ZIP.
[i]cheminsFichiers étant le chemin absolu du dit-fichier, il sera ainsi stocké de la même manière dans l’archive.
Il suffit donc de séparer le nom du fichier de son path : c’est ce nom que prendra la variable entry, et le fichier sera ainsi stocké à la racine du .ZIP.

C’est pas ce que j’ai écrit ? :heink:

Bon, tant mieux si t’as résoulu le probleme par toi meme !

Désolé vitamin, j’avais pas vu ton message :ane:
Merci pour ton aide qui aurait pu m’économiser 10 minutes :o)