logo

Komprimera och dekomprimera filer i Java

DeflaterOutputStream och InflaterInputStream  klasser tillhandahålls i Java för att komprimera och dekomprimera filinnehållet. Dessa klasser ger användbara metoder som kan användas för att komprimera  filinnehållet.

Komprimera en fil med DeflaterOutputStream

Den här klassen implementerar ett utströmsfilter för att komprimera data i komprimeringsformatet "deflate". Den används också som grund för andra typer av komprimeringsfilter som GZIPOutputStream. Viktiga metoder:
    void close() : Skriver återstående komprimerad data till utdataströmmen och stänger den underliggande strömmen. protected void deflate():Skriver nästa block med komprimerad data till utgångsströmmen. void finish() : Avslutar att skriva komprimerad data till utdataströmmen utan att stänga den underliggande strömmen. void flush() : Spolar den komprimerade utströmmen. void write(byte[] b int off int len) :Skriver en array av byte till den komprimerade utströmmen där av är startförskjutningen för data och len är det totala antalet byte. void write(int b):Skriver en byte till den komprimerade utströmmen.
Steg för att komprimera en fil (fil 1)
  • Ta en indatafil "fil 1" till FileInputStream för att läsa data.
  • Ta utdatafilen "fil 2" och tilldela den till FileOutputStream . Detta kommer att hjälpa till att skriva data till "fil2".
  • Tilldela FileOutputStream till DeflaterOutputStream för att komprimera data.
  • Läs nu data från FileInputStream och skriv in den i DeflaterOutputStream. Den kommer att komprimera data och skicka den till FileOutputStream som lagrar den komprimerade data i utdatafilen.
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();  } } 

Dekomprimera en fil med InflaterInputStream

Den här klassen implementerar ett strömfilter för att avkomprimera data i komprimeringsformatet "deflate". Den används också som grund för andra dekompressionsfilter som GZIPInputStream. Viktiga metoder:
    int tillgänglig(): Returnerar 0 efter att EOF har uppnåtts annars returnerar alltid 1. void close() : Stänger ingångsströmmen och frigör alla systemresurser som är associerade med strömmen. protected void fill(): Fyller indatabufferten med mer data att dekomprimera. void mark (int readlimit): Markerar den aktuella positionen i inmatningsströmmen. boolean markSupported() : Testar om ingångsströmmen stöder markerings- och återställningsmetoderna. int read(): Läser en byte med okomprimerad data. int read(byte[] b int off int len): Läser dekomprimerad data till en array av byte till den komprimerade utströmmen där av är startförskjutningen för data och len är det totala antalet byte. void reset() : Positionerar om denna ström till positionen vid den tidpunkt då markeringsmetoden senast anropades på denna ingångsström.
Steg för att dekomprimera en fil
  • Filen med namnet 'fil2' innehåller nu komprimerad data och vi behöver hämta original dekomprimerad data från denna fil.
  • Tilldela den komprimerade filen "file2" till FileInputStream. Detta hjälper till att läsa data från "fil2".
  • Tilldela utdatafilen "file3" till FileOutputStream. Detta kommer att hjälpa till att skriva okomprimerad data till "file3".
  • Läs nu okomprimerad data från InflaterInputStream och skriv in den i FileOutputStream. Detta kommer att skriva okomprimerad data till "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();    } } 
  Skapa frågesport