では、本題のファイルを読み込む部分を見ていきましょう。
コンソールから値を受け取るプログラムと非常に似ていると思います。一部が違うだけで、同じような処理が書かれています。このように、コンストラクタに次から次へインスタンスを渡し、最終的に作成されたオブジェクトは、様々な材料(いろいろなクラスのインスタンス)で作られています。材料を変えることによって、コンソールから値を受け取ったり、ファイルを読み込んだりすることが出来ます。このような
API は、非常に良い設計であると言われています。良い設計のパターンを記載してあるデザインパターンにもしばしば登場します。特に、もっとも有名なデザインパターンである「GoF
のデザインパターン」では、Decorator パターンとして登場します。
ファイルを読み込むインスタンスを作成し、readLine メソッドでファイルの1行分を読み込みます。ファイル内のすべてのデータを読み込むと、null が返却され while ループを終了します。ループ中は、ファイルの1行分の文字列を StringBuffer オブジェクトに格納していきます。そして、最後に連結された文字列を String 型に変換し返却します。
public String getFile(String fileName)
throws IOException{
StringBuffer sb = new StringBuffer();
BufferedReader br
= new BufferedReader(
new InputStreamReader(
new FileInputStream(fileName),"MS932"));
String inString;
while ((inString = br.readLine()) != null){
sb.append(inString);
sb.append("\n");
}
br.close();
return sb.toString();
}