JAVA zipper des fichiers

Résolu
no_7 Messages postés 7 Date d'inscription   Statut Membre Dernière intervention   -  
 roberto incognito -
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   Statut Membre Dernière intervention   4
 
OK c bon j'ai trouvé

il faut juste modifier ca :

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


@+
1
roberto incognito
 
Et bien il faut juste ne pas mettre le chemin complet dans le ZipEntry, mais uniquement le nom du fichier.
1
kalle5
 
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