package j2.lesson09;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 課題2202 - 解答例.
* バイナリファイル内に書かれた数値の合計を計算するプログラム.
* @author arakawa
* @version $Id: TotalInBinaryFile_java.rps,v 1.1 2006/03/06 12:56:15 java2005 Exp $
*/
public class TotalInBinaryFile {
/**
* バイナリファイル内に書かれた数値の合計を計算するプログラム.
* @param args 無視される
* @throws IOException 入出力中に例外が発生した場合
* @throws IllegalFileFormatException ファイルの形式が不正であった場合
*/
public static void main(String[] args) throws IOException, IllegalFileFormatException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// print "ファイル名を入力:"
System.out.print("ファイル名を入力:");
// filename = コンソール入力 (String)
String filename = reader.readLine();
// file = filename のファイルを読み込み用に開く
DataInputStream file;
try {
file = new DataInputStream(new BufferedInputStream(new FileInputStream(filename)));
}
// if filename が開けない
catch (FileNotFoundException e) {
// print filename + "が開けませんでした。", 改行
System.out.println(filename + "が開けませんでした。");
// プログラムを終了
return;
}
try {
// total = 各数値の合計
double total = 0.0;
while (true) {
int code = file.read();
if (code == -1) {
break;
}
// code = 1 -> int
else if (code == 1) {
total += file.readInt();
}
// code = 2 -> double
else if (code == 2) {
total += file.readDouble();
}
// if 形式を表す値が 1 でも 2 でもない
else {
// throw IllegalFileFormatException
throw new IllegalFileFormatException("不明なコード");
}
}
// if ファイル読み込み中に例外が発生しなかった
// print "合計は" + total
System.out.println("合計は" + total);
}
// if データを読み込んでいる途中でファイルの終端に達した
catch (EOFException e) {
// throw IllegalFileFormatException
throw new IllegalFileFormatException("不正なファイルの終端");
}
finally {
file.close();
}
}
}
|