テキストファイルを読み込む
InputStreamReaderクラス
InputStreamから受けたバイトを、文字にデコードします。
主に BufferedReaderの引数として使用します。
java.io.InputStreamReader
Point
次のページに紹介する BufferedReader を併用することで、
変換効率が向上します。
目次
1.概要
InputStreamから受けたバイトを、文字にデコードします。
正しくデコードするためには、テキストファイルの文字コードでデコードする必要があります。
効率的なデコードのために、BufferedReaderクラスを併用するのが一般的でが、
このページでは説明のため、InputStreamReaderクラスをそのまま使ってみます。
(BufferedReaderクラスは、次のページで扱います。)
お急ぎの方は、
このページを飛ばして
BufferedReaderに行っても
いいよ。
え?
いいんすか
そんな感じで?
2.継承関係
Readerって
こういう事ね?
InputStreamReaderの継承関係
java.io.Reader 抽象クラス
|
└ java.io.InputStreamReader クラス
重要
InputStream を テキストとして解釈(Read)します。
3.コンストラクタ
引数に、InputStream のインスタンスを与えます。
この章では、ファイルへの出力を行いますので、
InputStream のサブクラスである FileInputStreamクラスを使用します。
InputStreamReader は、与えられた InputStream を、文字として解釈します。
文字コードが複数バイトの場合でも適切に対応してくれます。
また、コンストラクタの第二引数に文字コードを指定することが可能です。
public InputStreamReader(InputStream in)
public InputStreamReader(InputStream in, String charsetName)
throws java.io.UnsupportedEncodingException
例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import java.io.UnsupportedEncodingException;
第二引数に、文字コードを指定すると、指定した文字コードでの出力ができます。
基本的にはこちらの書式を使おうと思います。
charsetName の例
- "UTF-8"
- "MS932"
4.readメソッド
readメソッドは、ストリームから単一の文字を読み込んで、文字コードを返します。
readメソッドを実行するたびに、次の文字コードを返します。
終端に達すると -1 を返します。
public int read()
throws java.io.IOException
例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import java.io.IOException;
ストリームの終わりに達した場合
-1 を返します。
FileInputStreamの
readメソッドと
全く同じなんスね。
ホントね。
だね。
5.closeメソッド
引数に与えた InputStream# を閉じてリソースを解放します。
読み込みが終わったら必ず closeします。
ストリーム(Stream)を
閉じるんですね?
そう。
コンストラクタで与えた
InputStreamクラスの
close()メソッドの事だ。
なので、InputStreamReaderで close()すれば、
あらためて InputStream#.close() を呼び出す必要はありません。
public void close()
throws java.io.IOException
例外処理を記述する場合には、以下をインポートする必要があります。
例外のimport
import java.io.IOException;
6.サンプルコード
前回同様 hello.txt を、wsディレクトリに配置しました。
Sample03_01 を wsディレクトリで実行して中身を読み込んでみましょう。
int byteData の値が、読み取った値です。
This is hello.txt
こんにちわ。
end
//Sample03_01.java
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.io.FileNotFoundException;
import java.io.IOException;
class Sample03_01{
public static void main(String[] args){
String path = "hello.txt";
File file = new File(path);
try {
FileInputStream inStream = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(inStream, "UTF-8");
int byteData;
while((byteData = reader.read()) != -1) {
System.out.print((char)byteData);//改行なし
/*System.out.println((char)byteData);//改行あり*/
}
reader.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e){
e.printStackTrace();
}
}
}
コマンドライン
>cd ws
ws>javac -encoding UTF-8 Sample03_01.java
ws>java Sample03_01
This is hello.txt
こんにちわ。
end
今回はSystem.out.printlnの代わりに
改行なしで表示する
System.out.printメソッドを使った。
お~!
今度はそれらしくなったっス。
ようやく使える見込みが
立ったわね。
お疲れ様でした。