fredericmazue wrote:Pour faire un zip il suffit d'ajouter des entrées sous forme de fichiers à priori pré-existants et contenant les données. Ils correspondent à quelle entrée/fichier les bytes que tu écris *directement* dans le zip ?
Si j'ai bien compris il suffit de transmetre le fichier à compresser (sans le faire byte par byte) mais je n'ai pas trouver comment le faire, je n'ai rien trouver ni sur le net ni dans mon bouquin Java.
voici ma methode:
public String ZipOneFile(String zipFileName, String source )
{
int retour = 0;
/*************
* Compression
*************/
try {
// création d'un flux d'écriture sur fichier
FileOutputStream dest = new FileOutputStream( zipFileName+ ".zip");
// calcul du checksum : Adler32 (plus rapide) ou CRC32
CheckedOutputStream checksum = new CheckedOutputStream(dest, new Adler32());
// création d'un buffer d'écriture
BufferedOutputStream buff = new BufferedOutputStream(checksum);
// création d'un flux d'écriture Zip
ZipOutputStream out = new ZipOutputStream(buff);
// spécification de la méthode de compression
out.setMethod(ZipOutputStream.DEFLATED);
// spécifier la qualité de la compression 0..9
out.setLevel(Deflater.BEST_COMPRESSION);
// buffer temporaire des données ‡ écriture dans le flux de sortie
byte data[] = new byte[BUFFER];
// création d'un flux de lecture
FileInputStream fi = new FileInputStream(source);
// création d'un tampon de lecture sur ce flux
BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER);
// création d'en entrée Zip pour ce fichier
ZipEntry entry = new ZipEntry(unAccent(source));
// ajout de cette entrée dans le flux d'écriture de l'archive Zip
out.putNextEntry(entry);
// écriture du fichier par paquet de BUFFER octets
// dans le flux d'écriture
int count;
while((count = buffi.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
// Close the current entry
out.closeEntry();
// fermeture du flux de lecture
buffi.close();
// fermeture du flux d'écriture
out.close();
buff.close();
checksum.close();
dest.close();
// traitement de toute exception
} catch(Exception e) {
e.printStackTrace();
test.log_erreur( e.getMessage(), this );
return "pb"+retour;
}
return "0";
}
Merci pour tes lumières :idea:
Manu
Si j'ai bien compris il suffit de transmetre le fichier à compresser (sans le faire byte par byte) mais je n'ai pas trouver comment le faire, je n'ai rien trouver ni sur le net ni dans mon bouquin Java.
voici ma methode:
Merci pour tes lumières :idea:
Manu