JAVA zipper des fichiers

Résolu/Fermé
no_7 Messages postés 7 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 5 août 2008 - 5 août 2008 à 16:46
 roberto incognito - 5 mai 2010 à 21:32
Bonjour,

Est ce que quelqu'un saurait comment faire pour zipper un fichier dans un zip en Java mais SANS tout son chemin.
Je m'explique : je souhaite zipper le fichier base.xml dans un fichier base.zip, mon problème est que je donne le chemin de mon fichier base.xml par exemple : C:/java/exportbase/base.xml et que lorsqu'il me crée le zip je retrouve à l'interieur de ce dernier le fichier mais avec toute son arborescence, i.e. quand je dezzipe base.zip, il me crée :
" java/exportbase/base.xml " or je souhaiterai avoir que base.xml lors du dezippage

voici comment j'appel ma méthode :
Zip Zipfile = new Zip();
String files[] = new String[1];
files[0]="C:/java/exportbase/base.xml ";
Zipfile.zip(files);


et voici cette dernière :
public void zip(String files[]) throws FileNotFoundException, IOException, Exception
    {
        byte data[] = new byte[BUFFER];
        FileOutputStream dest = new FileOutputStream("C:/java/exportbase/base.zip");
        BufferedOutputStream buff = new BufferedOutputStream(dest);
        ZipOutputStream out = new ZipOutputStream(buff);
 
        out.setMethod(ZipOutputStream.DEFLATED);
        out.setLevel(9);
        for(int i=0; i<files.length; i++) {
            FileInputStream fi = new FileInputStream(files[i]);
            BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER);
            ZipEntry entry = new ZipEntry(files[i]);      
            out.putNextEntry(entry);        
            int count;
            while((count = buffi.read(data, 0, BUFFER)) != -1) {
                out.write(data, 0, count);
            }
            out.closeEntry();
            buffi.close();
        }
        out.flush(); 
        out.close();
      }


J'ai essayé de passer en paramètre uniquement le nom du fichier, le chemin complet mais cela ne fonctionne pas.

Dans le " FileOutputStream " si je met que le nom du fichier il me trouve rien, enfin vous avez bien compris je galère ... ,

Si vous avez une idée ... ou la solution ;-) je suis preneur, merci d'avance
A voir également:

3 réponses

no_7 Messages postés 7 Date d'inscription jeudi 31 juillet 2008 Statut Membre Dernière intervention 5 août 2008 4
5 août 2008 à 17:00
OK c bon j'ai trouvé

il faut juste modifier ca :

 ZipEntry entry = new ZipEntry("baseorg.xml");   


@+
1
roberto incognito
5 mai 2010 à 21:32
Et bien il faut juste ne pas mettre le chemin complet dans le ZipEntry, mais uniquement le nom du fichier.
1
Salut

J'ai le meme probleme mais les dossiers que je veux compresser ont des sous dossiers... c'est-a-dire que quand je unzip mon dossier.zip, je me retrouve avec l'arbre complet.
Si je sauve mon dossier.zip sur mon Bureau, quand je unzip, j'ai un dossier User dans lequel se trouve un dossier Bureau et finalement dossier...

FileOutputStream dest;
try {
File comp = new File(selectedFile + ".zip");
dest = new FileOutputStream(comp);
ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(dest));
compressFile(selectedFile, out);
out.close();
}

public static void compressFile(File toCompress, ZipOutputStream zos){
BufferedInputStream origin = null;
try {
byte data[] = new byte[1024];
File f = new File(toCompress.getAbsolutePath());

if(f.isDirectory()){
String files[] = f.list();
if(files != null){
for(int i = 0; i < files.length; i++)
compressFile(new File(toCompress.getCanonicalPath() + toCompress.separator + files[i]), zos);
}
}
else{
FileInputStream fi = new FileInputStream(f);
origin = new BufferedInputStream(fi, 1024);
ZipEntry entry = new ZipEntry(f.getAbsolutePath());
zos.putNextEntry(entry);
int count;
while((count = origin.read(data, 0, 1024)) != -1) {
zos.write(data, 0, count);
}
zos.closeEntry();
origin.close();
fi.close();
}

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

Lorsque je change

ZipEntry entry = new ZipEntry(f.getAbsolutePath());
en
ZipEntry entry = new ZipEntry(f.getName());

je n'ai plus l'arbre complet dans dossier.zip mais mon dossier.zip est mal compressé et j'ai des erreurs comme celle-ci:
java.util.zip.ZipException: duplicate entry: .DS_Store
java.util.zip.ZipException: duplicate entry: FrameHandler.java
etc...

Merci
0