第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メソッドを実行しています。