第89回 入出力の基本
今回は「入出力の基本」について見ていきたいと思います。
入出力にはストリームという概念があります。
ストリームとはプログラムと入出力装置との間のデータの流れです。
Javaではストリームに対して読み書きするという統一的手段によって、入出力処理を行うことができます。
これにより、画面に対する入出力も、ファイルに対する入出力も同じように行えるのです。
文字ストリームは、文字単位でデータの入出力を行うためのストリームです。
入力文字ストリームを扱うクラスはReaderクラスを継承し、出力文字ストリームを扱うクラスはWriterクラス継承しています。
バイトストリームはバイト単位でデータの入出力を行うためのストリームです。
入力バイトストリームを扱うクラスはInputStreamクラスを継承し、出力バイトストリームを扱うクラスはOutputStreamクラスを継承しています。
今回は入力文字ストリームについて見ていきます。
次のサンプルコードは、テキストファイルを読み込むプログラムです。
import java.io.BufferedReader;
import java.io.FileReader;
public class Main {
public static void main(String[] args) {
BufferedReader bufferedReader = null;
try {
bufferedReader = new BufferedReader(new FileReader("input.txt"));
while (bufferedReader.ready()) {
System.out.println(bufferedReader.readLine());
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (Exception e) {
}
}
}
}
}
FileReaderクラスは、ファイルの文字ストリームから読み込むためのクラスです。
BufferedReaderクラスは、バッファリングすることによって、文字ストリームから効率良く読み込むためのクラスです。
BufferedReaderクラスのコンストラクタにFileReaderインスタンスを渡すことによってファイルから読む処理に、バッファリグを行って読むという機能を追加しています。
このようにして機能を追加していくのはデザインパターン(Decorator)でも取り上げられており、java.ioの特徴的な部分です。
読み込み以降の命令はBufferedReaderインスタンスに対して行います。
readLineメソッドが読み込みを行っている部分です。
ファイルの読み込みが完了したら、ストリームを閉じるようにします。
読み込み時に例外が発生してもストリームを閉じるため、finallyブロックでcloseメソッドを実行しています。

