[解決済み】EOFException - どのように処理するのですか?
質問
を参考にした初心者Javaプログラマーです。 Javaチュートリアル .
の簡単なJavaプログラムを使っています。
Javaチュートリアル
's
データストリームのページ
が表示され続け、実行時に
EOFException
. 読者は最終的にファイルの最後に来なければならないので、これは正常なことなのか疑問に思っていました。
import java.io.*;
public class DataStreams {
static final String dataFile = "F://Java//DataStreams//invoicedata.txt";
static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
static final int[] units = { 12, 8, 13, 29, 50 };
static final String[] descs = {
"Java T-shirt",
"Java Mug",
"Duke Juggling Dolls",
"Java Pin",
"Java Key Chain"
};
public static void main(String args[]) {
try {
DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(dataFile)));
for (int i = 0; i < prices.length; i ++) {
out.writeDouble(prices[i]);
out.writeInt(units[i]);
out.writeUTF(descs[i]);
}
out.close();
} catch(IOException e){
e.printStackTrace(); // used to be System.err.println();
}
double price;
int unit;
String desc;
double total = 0.0;
try {
DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(dataFile)));
while (true) {
price = in.readDouble();
unit = in.readInt();
desc = in.readUTF();
System.out.format("You ordered %d" + " units of %s at $%.2f%n",
unit, desc, price);
total += unit * price;
}
} catch(IOException e) {
e.printStackTrace();
}
System.out.format("Your total is %f.%n" , total);
}
}
コンパイルは問題ないのですが、出力が
You ordered 12 units of Java T-shirt at $19.99
You ordered 8 units of Java Mug at $9.99
You ordered 13 units of Duke Juggling Dolls at $15.99
You ordered 29 units of Java Pin at $3.99
You ordered 50 units of Java Key Chain at $4.99
java.io.EOFException
at java.io.DataInputStream.readFully(Unknown Source)
at java.io.DataInputStream.readLong(Unknown Source)
at java.io.DataInputStream.readDouble(Unknown Source)
at DataStreams.main(DataStreams.java:39)
Your total is 892.880000.
から Javaチュートリアル 's データストリームのページ と書かれています。
<ブロッククオートDataStreams は、ファイル終端条件を検出するために EOFException 無効な戻り値をテストするのではありません。DataInputメソッドの実装はすべて戻り値の代わりにEOFExceptionを使用します.
ということは
EOFException
は正常なので、キャッチするだけで処理しないのは、ファイルの末尾に到達したということでいいのでしょうか?
もし、処理した方が良いということであれば、どのようにすれば良いのかアドバイスをお願いします。
EDIT
ご指摘の内容から、修正したのは
in.available() > 0
に対して
while
ループ条件
あるいは、例外の処理を何もしないのも、問題ないからです。
どのように解決するのですか?
ファイルからの読み込み中、ループを終了していません。そのため、すべての値を読み込んで 正しく は、次の行の読み込みの繰り返しでEOFExceptionをスローします。
price = in.readDouble();
ドキュメントを読むと、こう書いてあります。
を投げます。
EOFException - この入力ストリームが8バイトを読み込む前に終了した場合。
IOException - ストリームが閉じられ、含まれる入力ストリームが閉じた後の読み込みをサポートしない、または別のI/Oエラーが発生しました。
whileループに適切な終了条件を設定し、問題を解決してください。
while(in.available() > 0) <--- if there are still bytes to read
関連
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み] テスト
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] JUnit 4のテストで、ある例外が投げられたことをどのように断言しますか?
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み】プログラムを停止/終了させることなく、完全な例外トレースバックをキャッチして表示する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Javaパッケージが存在しないエラー
-
[解決済み] java のクラス内のコンストラクタは、指定された型に適用できない
-
[解決済み】ResultSetの例外 - 結果セットの開始前
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み] intellijが自動配線リポジトリにタイプのBeanが見つからないと不正確な発言をする件
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み] Hide Utility Class Constructor : ユーティリティクラスはパブリックまたはデフォルトコンストラクタを持つべきではありません。
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。