なかなかクラスの説明に入れず申し訳ありません。
いよいよJavaにおけるファイル入出力の基本パターンです。
ファイルの入出力というからには、
入力と出力があります。
分かりやすく言うと、読み込みと書き込みです。
ここではまず、読み込みについて解説します。
読み込み系のクラスは沢山あります。
Readerクラス
InputStreamReaderクラス
FileReaderクラス
InputStreamクラス
FileInputStreamクラス
BufferedReaderクラス
BufferedInputStream
はっきり言って、謎です。
解説書やWebサイトによっていろんなのが使われていて、
おおよそ7種類ぐらい出てきます。
しかし、いきなり7種類ものクラスを区別するのは無理です。
私は研究の結果、7つのクラスを区別する、
重要な質問が2つあるということを見出しまし。
1.ファイルをバイナリとして読み込むのか、テキストとして読み込むのか?
2.一文字ずつ読み込むのか、一行ずつまとめて読み込むのか?
ということです。
ここでは一旦バイナリ形式やテキスト形式ということは置いておいて、
まず、それぞれの答えに応じて、7つのクラスを分類しましょう。
1.
バイナリとして読み込む
→InputStream(abstract)
└ FileInputStream
テキストとして読み込む
→Reader(abstract)
└ InputStreamReader
└FileReader ・・・文字コードの指定などが不要な一番便利なクラス。
ここまでで5つのクラスが出てきました。
2.の質問は、効率よく読み込みたいですか?
という質問と同じ意味を持っています。
2.
一文字ずつ読み込む
Buffered○○クラスは使わなくて良い。
一行ずつまとめて読み込む=効率よく読み込む
ここで1.のバイナリかテキストかが登場します。
バイナリとして読み込む BufferedInputStream コンストラクタの引数は InputStream型
テキストとして読み込む BufferedReader コンストラクタの引数は Reader型
ということで、7つのクラスを分類することができました。
読み込み系クラスがいろいろ出すぎて頭がごっちゃになったら、
上記の2つの質問を投げかけて整理してみてください。
詳しい使い方は後の記事で解説します。