logo

Comprimir y descomprimir archivos en Java

Las clases DeflaterOutputStream e InflaterInputStream se proporcionan en Java para comprimir y descomprimir el contenido del archivo. Estas clases proporcionan métodos útiles que se pueden utilizar para comprimir el contenido del archivo.

Comprimir un archivo usando DeflaterOutputStream

Esta clase implementa un filtro de flujo de salida para comprimir datos en el formato de compresión 'deflate'. También se utiliza como base para otros tipos de filtros de compresión como GZIPOutputStream. Métodos importantes:
    cierre vacío() : Escribe los datos comprimidos restantes en el flujo de salida y cierra el flujo subyacente. desinflado vacío protegido() :Escribe el siguiente bloque de datos comprimidos en el flujo de salida. acabado vacío() : Termina de escribir datos comprimidos en el flujo de salida sin cerrar el flujo subyacente. descarga vacía() : Vacía el flujo de salida comprimido. escritura nula (byte [] b int off int len):Escribe una matriz de bytes en el flujo de salida comprimido donde off es el desplazamiento inicial de los datos y len es el número total de bytes. escritura nula (int b):Escribe un byte en el flujo de salida comprimido.
Pasos para comprimir un archivo (archivo 1)
  • Lleve un archivo de entrada 'archivo 1' a FileInputStream para leer datos.
  • Tome el archivo de salida 'archivo 2' y asígnelo a FileOutputStream. Esto ayudará a escribir datos en el "archivo2".
  • Asigne FileOutputStream a DeflaterOutputStream para comprimir los datos.
  • Ahora lea los datos de FileInputStream y escríbalos en DeflaterOutputStream. Comprimirá los datos y los enviará a FileOutputStream, que almacena los datos comprimidos en el archivo de salida.
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 archivo usando InflaterInputStream

Esta clase implementa un filtro de flujo para descomprimir datos en el formato de compresión 'deflate'. También se utiliza como base para otros filtros de descompresión como GZIPInputStream. Métodos importantes:
    int disponible() : Devuelve 0 después de alcanzar el EOF; de lo contrario, siempre devuelve 1. cierre vacío() : Cierra el flujo de entrada y libera todos los recursos del sistema asociados con el flujo. relleno vacío protegido() : Llena el búfer de entrada con más datos para descomprimir. marca nula (int readlimit): Marca la posición actual en el flujo de entrada. marca booleanaSupported() : Prueba si el flujo de entrada admite los métodos de marca y reinicio. int lectura() : Lee un byte de datos sin comprimir. int read(byte[] b int off int len): Lee datos descomprimidos en una matriz de bytes para el flujo de salida comprimido donde off es el desplazamiento inicial de los datos y len es el número total de bytes. reinicio vacío() : Reposiciona esta secuencia en la posición en el momento en que se llamó por última vez al método de marca en esta secuencia de entrada.
Pasos para descomprimir un archivo
  • El archivo con el nombre "archivo2" ahora contiene datos comprimidos y necesitamos obtener datos descomprimidos originales de este archivo.
  • Asigne el archivo comprimido 'file2' a FileInputStream. Esto ayuda a leer datos del "archivo2".
  • Asigne el archivo de salida 'file3' a FileOutputStream. Esto ayudará a escribir datos sin comprimir en el "archivo3".
  • Ahora lea los datos sin comprimir de InflaterInputStream y escríbalos en FileOutputStream. Esto escribirá los datos sin comprimir en el "archivo3".
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();    } } 
  Crear cuestionario