logo

Compresser et décompresser des fichiers en Java

Les classes DeflaterOutputStream et InflaterInputStream sont fournies en Java pour compresser et décompresser le contenu du fichier. Ces classes fournissent des méthodes utiles qui peuvent être utilisées pour compresser le contenu du fichier.

Compresser un fichier à l'aide de DeflaterOutputStream

Cette classe implémente un filtre de flux de sortie pour compresser les données au format de compression « deflate ». Il sert également de base à d’autres types de filtres de compression tels que GZIPoutputStream. Méthodes importantes :
    void close() : Écrit les données compressées restantes dans le flux de sortie et ferme le flux sous-jacent. protected void deflate() :Écrit le bloc suivant de données compressées dans le flux de sortie. void finish() : Termine l'écriture des données compressées dans le flux de sortie sans fermer le flux sous-jacent. void flush() : Vide le flux de sortie compressé. void write(byte[] b int off int len) :Écrit un tableau d'octets dans le flux de sortie compressé, où off est le décalage de début des données et len ​​est le nombre total d'octets. void write(int b) :Écrit un octet dans le flux de sortie compressé.
Étapes pour compresser un fichier (fichier 1)
  • Transférez un fichier d'entrée « fichier 1 » vers FileInputStream pour lire les données.
  • Prenez le fichier de sortie « fichier 2 » et attribuez-le à FileOutputStream . Cela aidera à écrire des données dans « file2 ».
  • Attribuez FileOutputStream à DeflaterOutputStream pour compresser les données.
  • Lisez maintenant les données de FileInputStream et écrivez-les dans DeflaterOutputStream. Il compressera les données et les enverra à FileOutputStream qui stocke les données compressées dans le fichier de sortie.
Java
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.Deflater; import java.util.zip.DeflaterOutputStream; class zip {  public static void main(String[] args) throws IOException {  //Assign the original file : file to  //FileInputStream for reading data  FileInputStream fis=new FileInputStream('file1');  //Assign compressed file:file2 to FileOutputStream  FileOutputStream fos=new FileOutputStream('file2');  //Assign FileOutputStream to DeflaterOutputStream  DeflaterOutputStream dos=new DeflaterOutputStream(fos);  //read data from FileInputStream and write it into DeflaterOutputStream  int data;  while ((data=fis.read())!=-1)  {  dos.write(data);  }  //close the file  fis.close();  dos.close();  } } 

Décompresser un fichier à l'aide d'InflaterInputStream

Cette classe implémente un filtre de flux pour décompresser les données au format de compression « deflate ». Il sert également de base à d’autres filtres de décompression tels que GZIPInputStream. Méthodes importantes :
    int disponible() : Renvoie 0 une fois que EOF a été atteint, sinon renvoie toujours 1. void close() : Ferme le flux d'entrée et libère toutes les ressources système associées au flux. protected void fill() : Remplit le tampon d'entrée avec plus de données à décompresser. marque vide (int readlimit) : Marque la position actuelle dans le flux d’entrée. booléen markSupported() : Teste si le flux d’entrée prend en charge les méthodes de marquage et de réinitialisation. int lire() : Lit un octet de données non compressées. int read(byte[] b int off int len) : Lit les données décompressées dans un tableau d'octets dans le flux de sortie compressé, où off est le décalage de début des données et len ​​est le nombre total d'octets. annuler la réinitialisation() : Repositionne ce flux à la position au moment où la méthode mark a été appelée pour la dernière fois sur ce flux d'entrée.
Étapes pour décompresser un fichier
  • Le fichier portant le nom « fichier2 » contient désormais des données compressées et nous devons obtenir les données décompressées originales de ce fichier.
  • Attribuez le fichier compressé « file2 » à FileInputStream. Cela aide à lire les données de « file2 ».
  • Attribuez le fichier de sortie « file3 » à FileOutputStream. Cela aidera à écrire des données non compressées dans « file3 ».
  • Lisez maintenant les données non compressées de InflaterInputStream et écrivez-les dans FileOutputStream. Cela écrira les données non compressées dans « file3 ».
Java
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.InflaterInputStream; //Uncompressing a file using an InflaterInputStream class unzip {  public static void main(String[] args) throws IOException {  //assign Input File : file2 to FileInputStream for reading data  FileInputStream fis=new FileInputStream('file2');  //assign output file: file3 to FileOutputStream for reading the data  FileOutputStream fos=new FileOutputStream('file3');    //assign inflaterInputStream to FileInputStream for uncompressing the data  InflaterInputStream iis=new InflaterInputStream(fis);    //read data from inflaterInputStream and write it into FileOutputStream   int data;  while((data=iis.read())!=-1)  {  fos.write(data);  }    //close the files  fos.close();  iis.close();    } } 
  Créer un quiz