为什么我只是在从我创建的文件中读取时才获得EOF异常?

时间:2016-05-09 04:48:12

标签: java

我尝试使用DataInputStreamFileInputStream从文本文件中读取。 我知道我应该使用FileReader,但我想用Byte流来尝试。

这是代码

import java.io.*;

public class FTest_3 {

public static void main(String[] args) throws IOException{
    DataInputStream stream = new DataInputStream(new FileInputStream("lol1.txt"));
    String str = stream.readUTF();
    System.out.println(str);
    stream.close();
}   
}

如果我尝试阅读文件 lol1.txt ,则会出现EOF ExceptionreadUTf(unknownsource)错误。

但是如果我使用DataOutputStream创建一个文件 lol1.txt ,然后使用上面的代码阅读它,它就可以正常工作。

这是我的写文件代码

import java.io.*;

public class FTest_4 {

public static void main(String[] args) throws IOException{
    DataOutputStream stream = new DataOutputStream(new FileOutputStream("lol1.txt"));
    stream.writeUTF("hahah");
    stream.close();
 }  
}

此外,我找不到任何可以回答我的查询的相关帖子。 谢谢!

2 个答案:

答案 0 :(得分:2)

readUTFnot a general-purpose method to read Strings from text files

它首先读取两个字节,它们应该包含后面的数据字节数(字节,而不是字符)。之后是修改后的UTF-8编码中字符串的字节。

在你的情况下,你可能正在阅读两个ASCII字符" ha" (0x68 0x61)在文件的开头,当解释为整数时,这是一个相当大的数字,然后得到一个EOF,因为文件中没有足够的字节来匹配它。

要读取原始字节,请使用InputStream#read方法之一。

要阅读文本文件,请使用Reader,而不是InputStream。然后你也可以阅读字符串。

答案 1 :(得分:0)

尝试使用stream.read();使用DataInputStream从文本文件中读取或使用特定值尝试使用stream.readDouble(),stream.readInt()等,并尝试使用stream.write()使用DataOutputStream写入文本文件。