Java 文件读取器工作不正常?

Java 文件读取器工作不正常?,java,file,infinite-loop,filereader,eof,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[]

我有下面的代码,由于某种原因,永远不会到达文件的结尾,所以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();
    }
}

谁能帮我解决这个问题!?提前感谢:)

您正在将
c
-a
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
    ,因为它总是使用默认编码。(将
    FileInputStream
    InputStreamReader
    一起使用,或者从Java 7直接使用。)

这太糟糕了,你从哪里弄来的?你想做什么,有人会给你指出一个更好的参考,因为这是不应该使用的java。@matt我刚刚重新访问了文件阅读器主题。我忘了基本的东西因此,由于缺少字符编码,文件阅读器强烈反对使用。更好的选择是使用。接下来你应该使用的是。我不是说太消极,但由于您刚刚开始这个程序,最好看看使用当前正确的技术。干杯