我正在从文本文件中读取两个字符串和一个double,但继续抛出EOFException
。
这是我的代码:
public static Book readBook(String pathname) throws IOException, FileNotFoundException{
DataInputStream dis = new DataInputStream(
new BufferedInputStream(
new FileInputStream(fn)));
String theTitle = dis.readUTF();
String theAuthor = dis.readUTF();
double thePrice = dis.readInt();
dis.close();
return new Book(theTitle, theAuthor, thePrice);
}
我对IO非常陌生,并且不知道如何解决此异常,抛出EOFExecption
似乎不起作用。任何帮助将不胜感激,干杯
编辑:堆栈跟踪+文件内容
Exception in thread "main" java.io.EOFException
at java.io.DataInputStream.readFully(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at java.io.DataInputStream.readUTF(Unknown Source)
at Model.readBook(Model.java:48)
at Model.runApp(Model.java:17)
at Main.main(Main.java:8)
文件内容
名 作者 10.00 NAME2 author2 12.00
(在档案中,他们都在单独的行上)
答案 0 :(得分:1)
如果这是文本文件,那么您可能需要使用Scanner:
Scanner scanner = new Scanner (new FileInputStream (fn));
String theTitle = scanner.nextLine ();
String theAuthor = scanner.nextLine ();
double thePrice = scanner.nextDouble ();
return new Book(theTitle, theAuthor, thePrice);
上面的代码要求标题,作者和价格分开。
答案 1 :(得分:0)
您的文字输入是如何格式化的?您是否指定了要在输入中读取的字符串的长度?我的想法是你没有,或指定长度错误,并且在随后的一次读取之前击中了文件的末尾。
首先,读取两个字节并用于构造无符号的16位整数,其方式与readUnsignedShort方法完全相同。此整数值称为UTF长度,并指定要读取的其他字节数。
http://docs.oracle.com/javase/6/docs/api/java/io/DataInput.html#readUTF()
答案 2 :(得分:0)
我正在从文本文件中读取两个字符串和一个双精度
不,你不是。您正在读取两个writeUTF()结果和二进制文件中的整数。如果它不是二进制文件,则使用错误的代码。您需要逐行读取文件,可能在空格上拆分每一行,并使用Double.parseDouble()
解析双精度。或者,使用java.util.Scanner
使整个事情变得更容易。