logo

Java でのファイルの圧縮と解凍

ファイルの内容を圧縮および解凍するために、DeflaterOutputStream クラスと InflaterInputStream クラスが Java で提供されています。これらのクラスは、ファイルのコンテンツを圧縮するために使用できる便利なメソッドを提供します。

DeflaterOutputStream を使用したファイルの圧縮

このクラスは、「deflate」圧縮形式でデータを圧縮するための出力ストリーム フィルターを実装します。これは、GZIPOutputStream などの他のタイプの圧縮フィルターの基礎としても使用されます。 重要な方法:
    void close() : 残りの圧縮データを出力ストリームに書き込み、基礎となるストリームを閉じます。 保護された void deflate() :圧縮データの次のブロックを出力ストリームに書き込みます。 ボイド終了() : 基礎となるストリームを閉じずに、出力ストリームへの圧縮データの書き込みを終了します。 ボイドフラッシュ() : 圧縮された出力ストリームをフラッシュします。 void write(byte[] b int off int len) :バイト配列を圧縮出力ストリームに書き込みます。ここで、off はデータの開始オフセット、len は総バイト数です。 void write(int b) :圧縮された出力ストリームにバイトを書き込みます。
ファイルを圧縮する手順(ファイル1)
  • データを読み取るために、入力ファイル「ファイル 1」を FileInputStream に渡します。
  • 出力ファイル「file 2」を取得し、それを FileOutputStream に割り当てます。これは、データを「file2」に書き込むのに役立ちます。
  • データを圧縮するために FileOutputStream を DeflaterOutputStream に割り当てます。
  • 次に、FileInputStream からデータを読み取り、DeflaterOutputStream に書き込みます。データを圧縮して FileOutputStream に送信し、圧縮データを出力ファイルに保存します。
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();  } } 

InflaterInputStream を使用したファイルの解凍

このクラスは、「deflate」圧縮形式でデータを解凍するためのストリーム フィルターを実装します。これは、GZIPInputStream などの他の解凍フィルターの基礎としても使用されます。 重要な方法:
    int available() : EOF に達すると 0 を返し、それ以外の場合は常に 1 を返します。 void close() : 入力ストリームを閉じ、ストリームに関連付けられているシステム リソースを解放します。 保護された void fill() : 入力バッファに圧縮解除するデータを追加します。 無効マーク(int readlimit): 入力ストリーム内の現在位置をマークします。 ブール値 markSupported() : 入力ストリームがマーク メソッドとリセット メソッドをサポートしているかどうかをテストします。 int read() : 非圧縮データのバイトを読み取ります。 int read(byte[] b int off int len) : 解凍されたデータをバイト配列に読み取り、圧縮出力ストリームに送ります。ここで、off はデータの開始オフセット、len は総バイト数です。 void リセット() : このストリームを、この入力ストリームで mark メソッドが最後に呼び出されたときの位置に再配置します。
ファイルを解凍する手順
  • 「file2」という名前のファイルには圧縮データが含まれているため、このファイルから元の解凍データを取得する必要があります。
  • 圧縮ファイル「file2」を FileInputStream に割り当てます。これは、「file2」からデータを読み取るのに役立ちます。
  • 出力ファイル「file3」を FileOutputStream に割り当てます。これは、非圧縮データを「file3」に書き込むのに役立ちます。
  • ここで、InflaterInputStream から非圧縮データを読み取り、FileOutputStream に書き込みます。これにより、非圧縮データが「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();    } } 
  クイズの作成