Rechercher : dans
Par :

JAVA zipper des fichiers

Dernière réponse le 23 jui 2009 à 00:48:04 no_7, le 5 aoû 2008 à 16:46:29 
 Signaler ce message aux modérateurs

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
Configuration: Windows XP
Firefox 2.0.0.16

Meilleures réponses pour « JAVA zipper des fichiers » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
[MS-Dos] Ecrire dans un fichier texte en batch VoirPour écrire dans un fichier texte, il suffit d'utiliser une redirection ">" : echo texte_à_ecrire > fichier_de_sortie.txt Pour écrire à la fin d'un texte existant (concaténation) : echo "écriture a la fin du fichier ">>...
Sed - Mettre la première lettre de chaque mot en majuscule VoirCapitaliser la 1ère lettre de chaque mot Voici deux façons de procéder : Méthode 1 sed -r 's/(^.| .)/\U&/g' Méthode 2 sed 's/^.\| [a-z]/\U&/g' Méthode 3 sed -r 's/\
Java - Caractéristiques du langage VoirFichier source, compilation et machine virtuelle Le fichier source d'un programme écrit en Java est un simple fichier texte dont l'extension est par convention .java. Ce fichier source doit être un fichier texte non formatté, c'est-à-dire un...
Formats et extensions de fichiers VoirRemarque : La liste ci-dessous n'est pas exhaustive et certains noms d'extension peuvent avoir plusieures fonctionnalités. Quant aux programmes proposés pour utiliser ces fichiers, ils ne sont pas forcément les seuls, ni les plus...
Java - Les packages VoirIntroduction aux packages La programmation Java consiste à créer des classes. Or, étant donné qu'un programme est généralement développé par une équipe de programmeurs, c'est-à-dire plusieurs personnes, le fait de concaténer (mettre bout à bout)...

1

no_7, le 5 aoû 2008 à 17:00:11

OK c bon j'ai trouvé

il faut juste modifier ca :

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


@+

Répondre à no_7

2

 kalle5, le 23 jui 2009 à 00:48:04

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

Répondre à kalle5
Collection CommentÇaMarche.net