文件阅读器无法正常工作?

时间:2016-10-11 14:24:16

标签: java file infinite-loop filereader eof

我有以下代码,由于某种原因,永远不会到达文件末尾,因此while循环永远不会结束。

public class Temp {
FileReader fr;

Temp() {
    try {
        fr = new FileReader("File path");
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    }
}

public static void main(String[] args) {
    Temp ob = new Temp();

    try {
        char c;
        while ((c = (char) ob.fr.read()) != -1) {
            System.out.println(c);
        }
        ob.fr.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

任何人都可以帮我解决这个问题!提前谢谢:)

1 个答案:

答案 0 :(得分:6)

您将c - char无符号类型)与-1进行比较。不要那样做。它会将c提升为int,因此您最终会使用65535。相反,将c设为int并在循环体内进行转换为char

int c;
while ((c = ob.fr.read()) != -1) {
    System.out.println((char) c);
}

我还建议不要为了在变量中存储某些东西而创建一个新对象......你可以在这里使用FileReader的局部变量。

我也建议:

  • 如果抛出异常,不仅仅是继续,好像什么都没有出错
  • 使用try-with-resources而不是手动关闭阅读器
  • 避免FileReader开头,因为它始终使用默认编码。 (将FileInputStreamInputStreamReader一起使用,或者从Java 7使用Files.newBufferedReader。)