【问题标题】:File Reader not working properly?文件阅读器无法正常工作?
【发布时间】:2016-10-11 14:24:15
【问题描述】:

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

谁能帮我解决这个问题!?在此先感谢:)

【问题讨论】:

  • 这太糟糕了,你从哪里得到的?你想做什么,有人会为你指出一个更好的参考,因为这是不应该使用的java。
  • @matt 我刚刚重新访问了文件阅读器主题。我忘记了基础知识。 ;)
  • 因此,由于缺少字符编码,我们强烈建议不要使用 FileReader。更好的选择是使用Files.newBufferedReader。您应该使用的下一件事是ARM。我的意思不是太消极,但是当你刚刚开始这个程序时,最好看看使用当前正确的技术。干杯。

标签: java file infinite-loop filereader eof


【解决方案1】:

您正在比较 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。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 1970-01-01
    • 2018-02-01
    • 2014-02-09
    相关资源
    最近更新 更多