Pour compresser (on dit aussi "zipper") un fichier on utilise une instance de ZipOutputStream. La classe ZipEntry représente quant à elle une entrée du fichier compressé.
Dans l'exemple suivant, on compresse le fichier "source.txt" vers "fichier.zip" :
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ExempleZip {
public static void main(String args[]) throws IOException {
// nom du fichier original
String nomFichierSource = "source.txt";
// nom du futur fichier compressé
String nomFichierZip = "fichier.zip";
// tampon de lecture-écriture
byte tampon[] = new byte[1024];
FileInputStream fis = new FileInputStream(
new File(nomFichierSource));
// création du flux de compression
ZipOutputStream zos = new ZipOutputStream(
new FileOutputStream(nomFichierZip));
// un fichier compressés peut avoir plusieurs entrées (fichiers)
ZipEntry entree = new ZipEntry(nomFichierSource);
zos.putNextEntry(entree);
boolean fini = false;
int taille;
while (!fini) {
taille = fis.read(tampon);
// read() retourne -1 quand il n'y a plus rien à lire
if (taille != -1) {
zos.write(tampon, 0, taille);
} else {
fini = true;
}
}
zos.close();
fis.close();
}
}