Les Allergies
Alimentaires
Posez votre question Signaler

JAVA zipper des fichiers [Résolu]

no_7 7Messages postés 31 juillet 2008Date d'inscription - Dernière réponse le 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
Lire la suite 

JAVA zipper des fichiers »

3 réponses
Réponse
+1
moins plus
OK c bon j'ai trouvé

il faut juste modifier ca :

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


@+
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
+0
moins plus
Et bien il faut juste ne pas mettre le chemin complet dans le ZipEntry, mais uniquement le nom du fichier.
Ajouter un commentaire
Ce document intitulé « JAVA zipper des fichiers » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?