Tôi là lập trình viên java mới bắt đầu theo số java tutorials.EOFException - cách xử lý?
Tôi đang sử dụng Chương trình Java đơn giản từ Java tutorials 's Data Streams Page và khi chạy, nó vẫn hiển thị EOFException
. Tôi đã tự hỏi nếu điều này là bình thường, khi người đọc phải đến cuối tập tin cuối cùng.
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);
}
}
Nó biên dịch tốt, nhưng đầu ra là:
ý rằng DataStreams phát hiện một điều kiện end-of-file:
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.
Từ 's Data Streams Page, nó nói Java tutorials bằng cách đánh bắt EOFException, thay vì thử nghiệm cho một giá trị trả lại không hợp lệ. Tất cả các triển khai của các phương thức DataInput đều sử dụng EOFException thay cho các giá trị trả về.
Vì vậy, điều này có nghĩa là bắt EOFException
là bình thường, vì vậy chỉ cần nắm bắt và không xử lý nó là tốt, có nghĩa là kết thúc tệp là gì?
Nếu nó có nghĩa là tôi nên xử lý nó, xin vui lòng tư vấn cho tôi về cách làm điều đó.
EDIT
Từ những gợi ý, tôi đã cố định nó bằng cách sử dụng in.available() > 0
cho tình trạng while
vòng lặp.
Hoặc, tôi không thể làm gì để xử lý ngoại lệ, bởi vì nó ổn.
Loại bỏ các 'e.printStackT race(); 'trong khối' catch' sẽ loại bỏ bản in của dấu vết stack của exception. Thay vào đó để in nó, bạn nên có thể đăng nhập nó. – araknoid