logo

Comprimir i descomprimir fitxers en Java

Les classes DeflaterOutputStream i InflaterInputStream  es proporcionen a Java per comprimir i descomprimir el contingut del fitxer. Aquestes classes proporcionen mètodes útils que es poden utilitzar per comprimir el contingut del fitxer.

Comprimir un fitxer amb DeflaterOutputStream

Aquesta classe implementa un filtre de flux de sortida per comprimir dades en el format de compressió "desinflat". També s'utilitza com a base per a altres tipus de filtres de compressió com GZIPOutputStream. Mètodes importants:
    void close(): Escriu les dades comprimides restants al flux de sortida i tanca el flux subjacent. desinflat de buit protegit():Escriu el següent bloc de dades comprimides al flux de sortida. acabat buit(): Acaba d'escriure dades comprimides al flux de sortida sense tancar el flux subjacent. void flush(): Esborra el flux de sortida comprimit. void write(byte[] b int off int len):Escriu una matriu de bytes al flux de sortida comprimit on off és el desplaçament inicial de les dades i len és el nombre total de bytes. void write(int b):Escriu un byte al flux de sortida comprimit.
Passos per comprimir un fitxer (fitxer 1)
  • Agafeu un fitxer d'entrada "fitxer 1" a FileInputStream per llegir les dades.
  • Agafeu el fitxer de sortida "fitxer 2" i assigneu-lo a FileOutputStream . Això ajudarà a escriure dades a "fitxer2".
  • Assigna FileOutputStream a DeflaterOutputStream per comprimir les dades.
  • Ara llegiu les dades de FileInputStream i escriviu-les a DeflaterOutputStream. Comprimirà les dades i les enviarà a FileOutputStream, que emmagatzema les dades comprimides al fitxer de sortida.
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();  } } 

Descomprimir un fitxer mitjançant InflaterInputStream

Aquesta classe implementa un filtre de flux per descomprimir dades en el format de compressió "desinflat". També s'utilitza com a base per a altres filtres de descompressió com GZIPInputStream. Mètodes importants:
    int disponible(): Retorna 0 després d'haver arribat a l'EOF, en cas contrari sempre retorna 1. void close(): Tanca el flux d'entrada i allibera tots els recursos del sistema associats al flux. omplir buit protegit(): Omple la memòria intermèdia d'entrada amb més dades per descomprimir. marca nul (límit de lectura int): Marca la posició actual al flux d'entrada. boolean markSupported(): Comprova si el flux d'entrada admet els mètodes de marca i restabliment. int read(): Llegeix un byte de dades sense comprimir. int read(byte[] b int off int len): Llegeix les dades descomprimides en una matriu de bytes al flux de sortida comprimit on off és el desplaçament inicial de les dades i len és el nombre total de bytes. void reset(): Reposiciona aquest flux a la posició en el moment en què es va cridar per última vegada el mètode de marca en aquest flux d'entrada.
Passos per descomprimir un fitxer
  • El fitxer amb el nom "fitxer2" ara conté dades comprimides i hem d'obtenir dades originals descomprimides d'aquest fitxer.
  • Assigna el fitxer comprimit "fitxer2" a FileInputStream. Això ajuda a llegir dades de "fitxer2".
  • Assigna el fitxer de sortida "fitxer3" a FileOutputStream. Això ajudarà a escriure dades no comprimides a "fitxer3".
  • Ara llegiu les dades no comprimides d'InflaterInputStream i escriviu-les a FileOutputStream. Això escriurà les dades no comprimides a "fitxer3".
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();    } } 
  Crea un qüestionari