Compresser un fichier au format ZIP

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();
    }
}