株式会社イーヴ

EeBlog(テクニカルブログ)

TOP > EeBlog > 第89回 入出力の基本

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