文字をあつかう入力ストリームです。文字コード変換を自動で行います。
Writer クラスとは逆の操作をするのが Reader クラスです。テキストファイルにテストデータを用意して、読み込ませながら処理をしたい場合などに使うと便利です。
ここではまず、ファイルから読み込みをするクラスを紹介します。java.io.FileReader というクラスです。よく使うコンストラクタは次の2つです。
FileReader(File file) throws FileNotFoundException
FileReader(String fileName) throws FileNotFoundException
FileReader の read( ) メソッドを使うと読み込みができますが、もっと使いやすくするために、この FileReader にフィルタをかけるような使い方をしてみます。
そこでよく使われるクラスが java.io.BufferedReader というクラスです。このクラスでフィルタをかけると改行までの1行をまとめて読み込むという使い方ができます。BufferedReader のコンストラクタは以下のとおりです
BufferedReader(Reader in)
引数には Reader クラスのオブジェクトを指定するので、先の FileReader オブジェクトを指定すればファイルからの読み込みが可能です。BufferedReader を使って1行分の読み込みをするには、
String readLine( )
というメソッドを使います。データの終端までいくと null を返します。
WriterTest.java
import java.io.*;
class ReaderTest {
public static void main(String args[]) {
try {
FileReader fr = new FileReader("readtest.txt");
BufferedReader in = new BufferedReader(fr);
String str;
while (true) {
str = in.readLine();
if (str==null) break;
System.out.println(str);
}
fr.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
テスト用に用意したテキストファイル readtest.txt
実行方法
C:\java_test>java ReaderTest
1行目
second line
3GYOUME
|
アプリケーションプログラムを作るとき、コマンドラインから値を入力したい場合があります。Javaの標準入力は System.in で与えられるので、DataInputStream クラスのコンストラクタに System.in を与えれば標準入力からの読み込みが可能です。
System.in は System クラスの in という変数で、これは InputStream クラスのオブジェクトです。
ですが、普通は先に紹介した BufferedReader クラスを利用して標準入力からの入力を受け付けます。ただ、ここで問題になるのは BufferedReader クラスのコンストラクタの引数には Reader クラスのオブジェクトを指定しなければならないということです。
そこで登場するクラスが java.io.InputStreamReader というクラスです。このクラスはバイト単位のデータを扱うストリームと文字を扱うストリームの橋渡しをします。ですから、
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader( isr );
とすれば、標準入力からの読み込みができます。BufferedReader を使っているので readLine() で1行分まとめて読み込みができます。
Stdin.java
import java.io.*;
class StdinTest {
public static void main(String args[]) {
try {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader in = new BufferedReader(isr);
String str;
while (true) {
System.out.print("何か入力して Enter を押します > ");
str = in.readLine();
if (str==null) break;
System.out.println( "--- "+str );
}
in.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
実行方法
C:\java_test>java StdinTest
何か入力して Enter を押します > Java Java Java
--- Java Java Java
何か入力して Enter を押します > 1234567890
--- 1234567890
何か入力して Enter を押します >
|
終了する場合は CTRL+Z を入力すると終了します。読み込んだデータは String 型なので、これを数値として扱いたい場合は、入門編21章で紹介したようなラッパークラスを使い変換します。