在Java中读取txt文件时获取EOFException

时间:2016-03-30 11:03:56

标签: java

我有谷歌一段时间,但我仍然感到困惑。当我使用FileOutputStream将一些文本写入txt文件然后使用FileInputStream来读取我的文件时,一切都是正确的。但是当我手动输入一些单词到我的txt文件,然后以UTF-8格式保存时,我得到了EOFException。 这是我的输入代码:

StringBuilder s = new StringBuilder();
FileInputStream inputStream = new FileInputStream("filename");
DataInputStream in = new DataInputStream(inputStream);
while (in.available()>0) {
    s.append(in.readUTF());
}
in.close();
System.out.println(s); 

3 个答案:

答案 0 :(得分:1)

  • readUTF()可以阅读的文件必须由writeUTF()撰写。不是FileOutputStream
  • writeUTF()写的文件不是文本文件。它是一个16位长字和序列的文件,采用修改后的编码,如Javadoc所述。
  • available() > 0不是文件结尾的有效测试。

当你说它是一个文本文件时,由于你的代码不起作用,我建议你应该使用BufferedReader.readLine()。并且没有ready()测试。 readLine()将在流末尾返回null。

答案 1 :(得分:0)

DataInputStream的Javadoc说:“应用程序使用数据输出流来写入以后可以由数据输入流读取的数据”。因此,使用DataInputStream从文件中读取手动编写的文本可能不是一个好主意。

如果需要读取字节,请考虑使用FileInputStream#read()方法;如果需要读取字符,请考虑使用FileReader#read()

答案 2 :(得分:0)

考虑使用FileInputStream来读取文件,即:

public static void main(String[] args) throws Exception {
    StringBuilder s = new StringBuilder();
    FileInputStream inputStream = new FileInputStream("file.txt");
    int content;
    while ((content = inputStream.read()) != -1) {
        s.append((char) content);
    }
    inputStream.close();
    System.out.println(s);
}