EOFException-如何处理?

我是遵循Java教程的Java初学者。

我正在使用Java教程的 “

数据流”页面中的简单Java程序,并在运行时一直显示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教程的 “

数据流页面”中,它显示:

注意,DataStreams通过捕获EOFException而不是测试无效的返回值来检测文件结束条件。DataInput方法的所有实现都使用EOFException而不是返回值。

那么,这是否意味着捕获EOFException是正常的,所以仅捕获它而不对其进行处理就可以了,这意味着已到达文件末尾?

如果这意味着我应该处理,请给我建议方法。

根据建议,我已通过将其in.available() > 0用于while循环条件进行了修复。

或者,我无能为力处理异常,因为它很好。

回答:

从文件读取时,您不会终止循环。因此,它读取了所有值,并在下一行的读取的下一次迭代中 抛出EOFException:

 price = in.readDouble();

如果您阅读该文档,则会显示:

抛出:

EOFException-如果此输入流在读取八个字节之前到达末尾。

IOException-流已关闭,并且包含的​​输入流在关闭后不支持读取,否则会发生另一个I / O错误。

在您的while循环中放置适当的终止条件以解决问题,例如,如下所示:

     while(in.available() > 0)  <--- if there are still bytes to read

以上是 EOFException-如何处理? 的全部内容, 来源链接: utcz.com/qa/429288.html

回到顶部