Compression-décompression de fichier

Description

Classe permetant la compression et décompression de fichier avec contrôle d'intégrité

Source / Exemple :


import java.io.*;
import java.util.zip.*;
import sun.text.Normalizer;

public class ZIPFichier {
    File OBjFile;
    public ZIPFichier() {

    }
/**********************************************************************/
/**

  • @param String SRC:Nom du Fichier Source nom.type
  • @param String DEST:Nom du Fichier Destination du type .Zip
/**********************************************************************/ void compression(String SRC,String DEST) throws FileNotFoundException, IOException { OBjFile = new File(SRC); /*Une valeur de taille de tampon pour les buffers d?entrée et de sortie utilisés par la suite, et un buffer de données*/ int BUFFER = 2048; byte data[] = new byte[BUFFER]; /*Création d?un flux d?écriture vers un fichier, ce fichier sera l?archive Zip finale*/ FileOutputStream dest = new FileOutputStream(DEST); // Contrôle des données ajout d'un checksum : Adler32 (plus rapide) CheckedOutputStream checksum =new CheckedOutputStream(dest, new Adler32()); /*Création d?un buffer de sortie afin d?améliorer les performances d?écriture*/ BufferedOutputStream buff = new BufferedOutputStream(checksum); /*Création d?un flux d?écriture Zip vers ce fichier à travers le buffer*/ ZipOutputStream out = new ZipOutputStream(buff); /*Spécifier la méthode de compression désirée*/ out.setMethod(ZipOutputStream.DEFLATED); /*Spécifier le taux de compression (entier positif entre 0 et 9)*/ out.setLevel(9); /*les fichiers à compresser*/ FileInputStream fi = new FileInputStream(OBjFile.getPath()); /*Création d'un buffer d?entrée*/ BufferedInputStream buffi = new BufferedInputStream(fi, BUFFER); /*Création d'une entrée Zip*/ ZipEntry entry = new ZipEntry(unAccent(OBjFile.getName())); /*affectation de l'entrée au flux de sortie*/ out.putNextEntry(entry); /*Écriture des entrées dans le flux de sortie par paquet de taille égale aux tampons d?entrée et de sortie*/ int count; while ((count = buffi.read(data, 0, BUFFER)) != -1) { out.write(data, 0, count); } /*Fermeture de l?entrée*/ out.closeEntry(); /*Fermeture des flux*/ buffi.close(); out.close(); } /**********************************************************************/ /**
  • @param String SRC:Nom du Fichier Source du type .Zip
  • @param String DEST:Nom du Fichier Destination nom.type
/**********************************************************************/ void decompression(String SRC,String DEST) throws FileNotFoundException, IOException { /*Déclaration d?un fichier destination*/ FileOutputStream FileDEST = new FileOutputStream(DEST); /*Ouverture du fichier à décompresser*/ FileInputStream FileZipSRC = new FileInputStream(SRC); /*Ouverture buffer sur ce fichier*/ BufferedInputStream buffer= new BufferedInputStream(FileZipSRC); /*Création d?un flux de lecture Zip vers ce fichier à travers le buffer*/ ZipInputStream FluxZIP = new ZipInputStream(buffer); ZipEntry entry; if(FluxZIP.getNextEntry() != null){ byte[] tab = new byte[4096]; /*Lecture du fichier ZIP*/ int lu = -1; do { lu = FluxZIP.read(tab); /*Test si Fin de fichier*/ if (lu > 0) FileDEST.write(tab, 0, lu); } while (lu > 0); /*Vidage du tampon en écriture*/ FileDEST.flush(); /*Fermeture de l?archive*/ FluxZIP.close(); } /*Fermeture du fichier destination*/ FileDEST.close(); /*Fermeture du fichier source*/ FileZipSRC.close(); } /**********************************************************************/ /**
  • @param String s:Caractère à tester
/**********************************************************************/ public static String unAccent(String s) { String temp = Normalizer.normalize(s, Normalizer.DECOMP, 0); return temp.replaceAll("[^\\p{ASCII}]",""); } }

Conclusion :


Le fichier ZIP comporte toutes les information et explication du code ;-).

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Du même auteur (cs_Moyan)