このプログラムを実行するためには Person クラスを定義しておく必要がある。
// 人物データを読んで表示するプログラム: Personクラスを使用
// 以下の宣言をクラス定義の前に書いておくと、
// java.io.BufferedReaderをBufferedReaderと略記できる。
import java.io.BufferedReader;
class ReadAndShow {
public static void main(String[] args) {
// "members"という名前のファイルから読む準備
BufferedReader input;
try {
input = new BufferedReader
(new java.io.InputStreamReader
(new java.io.FileInputStream("members")));
} catch (Exception e) {
input = null; // ファイルが見つからなかった場合
}
// 最初に人数が書いてあるのでそれを読んで捨てる
int numberOfPersons = readInteger(input);
Person p = readPerson(input); // ファイルから人物データを読む
System.out.println(personToString(p)); // データを表示する
}
// ファイルから1行読んで文字列として返す
static String readLine(BufferedReader input) {
try {
return input.readLine(); // 1行読む
} catch (Exception e) {
return ""; // 正しくない場合は空文字列にする
}
}
// ファイルから1行読んで整数に変換して返す
static int readInteger(BufferedReader input) {
// Integer.parseInt(x) は string x を整数に変換する
return Integer.parseInt(readLine(input));
}
// ファイルから1行読んで実数に変換して返す
static double readDouble(BufferedReader input) {
// new Double(x) は文字列xから実数オブジェクトを作る
// doubleValueメソッドは、実数オブジェクトから実数値をとり出す
return new Double(readLine(input)).doubleValue();
}
// ファイルから人物データを1人分読んでPersonオブジェクトを作って返す
static Person readPerson(BufferedReader input) {
Person p = new Person(); // Personオブジェクトを作る
// 以下、人物の各情報を読んでPersonオブジェクトの中にセットする
p.name = readLine(input); // 名前
p.birthYear = readInteger(input); // 生まれた年
p.birthMonth = readInteger(input); // 生まれた月
p.birthDate = readInteger(input); // 生まれた日
p.height = readDouble(input); // 身長
p.weight = readDouble(input); // 体重
return p; // 完成したオブジェクトを返す
}
// 人物データを表示する
static String personToString(Person p) {
return ("名前: " + p.name +
", 誕生日:" + p.birthYear + "-" + p.birthMonth +
"-" + p.birthDate +
", 身長:" + p.height + ", 体重:" + p.weight);
}
}
Hidehiko Masuhara, November 2000