Publié le 25/05/2011
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
1 commentaires

Compresser des fichiers avec ZipOutputStream

Pour compresser plusieurs fichiers dans une archive, c'est bien souvent le format zip qui est choisi. Il existe des algo avec un meilleur taux de compression par contre le format zip est compatible avec tous les systèmes. Avec le langage JAVA, un fichier zip est facile à créer puisque la class ZipOutputStream fait parti du jdk.

Ajouter des fichiers à un zip

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 de compression de 3 fichiers

Dans l'exemple ci-dessous, voyons comment créer une nouvelle archive au format zip et d'y ajouter 3 fichiers à partir du disque dur.
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

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.
avatar y__fe

Publié par y__fe

le 03/07/2015 à 14:37:42

Impeccable merci !

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
java - class
Mise a jour
25/05/2011
Visualisation
vu 10585 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 267 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Arthur dans java

Salut!
J'ai repris ton code pour un projet mais en testant le programme rien ne s'affiche. Pourquoi ?
Dois-je mettre a jour quelque chose ? Importer ?
La seule modification que j'...

Publié par Coll dans java

Excuse moi, mais pourrais tu expliquer un peu plus precisement ce que tu fais lorsque tu convertis en gris je comprends l'idee mais pas ce que chaque action fait precisement et le cacth a la fin. Parc...

Publié par Marcos dans java

Bon travail , mais il a quelque chose d'etrange ! Je devais faire l'interface publique de classe avec des variables de position separees Position NORMAL = null; Position RIGHT = null; et posit...

Publié par Souti dans php5

Merci pour ce code. Trs utile.

Pour mon cas, il a fallu que j'ajoute une } avant ?> le pour fermer le for each.

Publié par ali dans logiciel

it is very good i am very happy becose for hand cap helpn tha is a good work