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

Shr*_*ath 3 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*eet 6

你比较c-一个char,这是一个无符号的类型-以-1.不要那样做.它推动cint,所以你会用65535反而结束了.相反,在循环体内做c一个int并进行转换char.

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

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

我也建议:

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