2013-02-20 33 views
-1

我从文本文件中读取两个字符串和一个双精度值,但仍然抛出一个EOFException。 这是我的代码:(Java)从文本文件读取时发生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 名2 author2 12.00

(在文件他们都在单独行)

+2

哪条线抛出异常?什么信息?你的任何变数是否被正确填入? – unholysampler 2013-02-20 18:04:04

+0

发布堆栈跟踪。 – 2013-02-20 18:04:27

+0

我总是忘记Stack Trace:P抱歉。 – Kamon241 2013-02-20 18:06:12

回答

1

如果是文本文件,那么你可能需要使用扫描仪:

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); 

上面的代码预期标题,作者和价格在不同的行。

+0

这绝对是完成读取纯文本文件的简单方法。我还建议@ Kamon241把每本书的条目放在一个新的行上。 – aglassman 2013-02-20 18:12:42

+0

干杯,现在测试它 – Kamon241 2013-02-20 18:14:09

0

你的文本输入格式是怎样的?你是否指定了要在输入中读取的字符串的长度?我的想法是,你没有,或者指定了长度错误,并且在之后的其中一个读取结果之前已经达到了文件的结尾。

首先读取两个字节,并用它构造一个无符号的16位整数,其方式与readUnsignedShort方法完全相同。该整数值称为UTF长度,并指定要读取的附加字节数。

http://docs.oracle.com/javase/6/docs/api/java/io/DataInput.html#readUTF()

0

我从一个文本文件

阅读两个字符串和双不,你不是。您正在读取两个writeUTF()结果和一个二进制文件中的整数。如果它不是二进制文件,则使用错误的代码。您需要逐行读取文件,可能会在空格中分隔每行,然后使用Double.parseDouble()解析该文件。或者,使用java.util.Scanner使整个事情更容易。

相关问题