Compresser des fichiers avec ZipOutputStream

Pour compresser plusieurs fichiers dans une archive, c'est bien souvent le format zip qui est choisi. Un fichier zip est facile à créer en JAVA en utilisant ZipOutputStream.
La class ZipFileWritter est une manière de compresser des fichiers en 3 étapes:
- création d'une nouvelle archive zip,
- ajout du fichier à compresser,
- fermeture de l'archive zip.

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.zip.Adler32;
import java.util.zip.CheckedOutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

/**
 * Compresser des fichiers dans un ZIP avec ZipOutputStream
 * @author Fobec 2011
 */
public class ZipFileWritter {

    /**
     * Flux de l'archive zip
     */
    private ZipOutputStream zos;

    /**
     * Constructor: creation d'une nouvelle archive
     * @param zipFile
     * @throws FileNotFoundException
     */
    public ZipFileWritter(String zipFile) throws FileNotFoundException {
        FileOutputStream fos = new FileOutputStream(zipFile);       
        //ajout du checksum
        CheckedOutputStream checksum = new CheckedOutputStream(fos, new Adler32());
        this.zos = new ZipOutputStream(new BufferedOutputStream(checksum));
    }

    /**
     * Ajouter un fichier au zip
     * @param fileName
     * @throws FileNotFoundException
     * @throws IOException
     */
    public void addFile(String fileName) throws FileNotFoundException, IOException {
        FileInputStream fis = new FileInputStream(fileName);
        int size = 0;
        byte[] buffer = new byte[1024];

        //Ajouter une entree à l'archive zip
        File file = new File(fileName);
        ZipEntry zipEntry = new ZipEntry(file.getName());
        this.zos.putNextEntry(zipEntry);
       
        //copier et compresser les données
        while ((size = fis.read(buffer, 0, buffer.length)) > 0) {
            this.zos.write(buffer, 0, size);
        }

        this.zos.closeEntry();
        fis.close();
    }

    /**
     * Fermer le fichier zip
     * @throws IOException
     */
    public void close() throws IOException {
        this.zos.close();
    }   
}

Exemple d'utilisation de ZipFileWritter

public static void main(String[] args) {
        try {
            ZipFileWritter zip = new ZipFileWritter("c://123.zip");
            zip.addFile("c://wouaf.txt");
            zip.addFile("c://deletemail.log");
            zip.addFile("c://fobec.gif");
            zip.close();
        } catch (IOException ex) {
            Logger.getLogger(ZipFileWritter.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire
Fiche de l'article
Mise a jour25/05/2011
VisualisationVu 618 fois
PublicInternaute
CategorieJAVA - Class - Fichier
Auteur de l'article
fobec fobec
connecté le 09/05/2012
36 ans - France Nord-Est
104 articles dans la section
Contacter l'auteur
Partager l'article