Javaでファイルを解凍する方法|InflaterInputStreamクラスの使い方を解説
Javaでは、InflaterInputStreamクラスを使うことで、圧縮されたファイルを解凍(展開)できます。このクラスはjava.util.zipパッケージに含まれており、DeflaterOutputStreamなどで圧縮されたデータを元の状態に戻す際に使用されます。
InflaterInputStreamクラスのread()メソッドは、入力ストリームから圧縮データを1バイトずつ読み込みます。このメソッドを利用して圧縮ファイルを解凍するには、以下の手順に従います。
圧縮ファイルを解凍する手順
- FileInputStreamオブジェクトを作成します。コンストラクタの引数として、圧縮ファイルのパスを文字列(String)形式で渡します。
- FileOutputStreamオブジェクトを作成します。コンストラクタの引数として、出力先ファイル(解凍後のファイル)のパスを文字列形式で渡します。
- InflaterInputStreamオブジェクトを作成します。コンストラクタの引数として、手順1で作成したFileInputStreamオブジェクトを渡します。
- InflaterInputStreamオブジェクトのread()メソッドでデータを読み込み、FileOutputStreamクラスのwrite()メソッドで出力ファイルへ書き込みます。
サンプルコード
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;
public class DeCompressingFiles {
public static void main(String args[]) throws IOException {
String inputPath = "D:\\ExampleDirectory\\compressed.txt";
// FileInputStreamのインスタンス化
FileInputStream inputStream = new FileInputStream(inputPath);
String outputPath = "D:\\ExampleDirectory\\output.jpg";
FileOutputStream outputStream = new FileOutputStream(outputPath);
InflaterInputStream decompresser = new InflaterInputStream(inputStream);
int contents;
while ((contents = decompresser.read()) != -1) {
outputStream.write(contents);
}
// ファイルを閉じてリソースを解放
outputStream.close();
decompresser.close();
System.out.println("File un-compressed.......");
}
}
実行結果
File un-compressed.......
コードのポイント
read()メソッドはストリームの終端に達すると-1を返すため、whileループで戻り値が-1になるまで繰り返し読み書きを行うのが基本的なパターンです。なお、Java 7以降ではtry-with-resources構文を利用すると、close()を明示的に呼び出さなくてもストリームが自動的にクローズされるため、リソースリークを防ぎ、より安全なコードを書くことができます。
-
Javaでディレクトリ階層を作成する方法|mkdirs()メソッドの使い方を解説
java.ioパッケージに含まれるFileクラスは、システム上のファイルやディレクトリ(パス名)を表現するためのクラスです。このクラスには、ファイルやディレクトリに対してさまざまな操作を行うためのメソッドが数多く用意されています。 mkdir()メソッドを使用すると、現在のFileオブジェクトが表すパスにディレクトリを1つ作成できます。ただし、このメソッドは親ディレクトリが存在しない場合には失敗するという点に注意が必要です。 ディレクトリ階層を作成するには? 複数階層からなる新しいディレクトリ構造を一括で作成したい場合は、同じFileクラスのmkdirs()メソッドを使用します。このメソッドは
-
【Java】JSONオブジェクトをファイルに書き込む方法(json-simpleライブラリの使い方)
JSON(JavaScript Object Notation)は、現在もっとも広く使われているデータ交換フォーマットのひとつです。軽量であることと、特定のプログラミング言語に依存しないことが大きな特徴で、異なるシステム間でのデータやり取りに最適です。 JavaでJSONファイルを読み書きするには、json-simple ライブラリが便利です。json-simpleは軽量なJSON処理ライブラリで、JSONテキストのエンコード(書き込み)とデコード(読み込み)の両方に対応しており、JSON仕様(RFC4627)に完全準拠しています。 ライブラリの準備 json-simpleを使用するには、まず