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

问题描述:

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

任何人都可以帮我解决这个问题!在此先感谢:)

+0

这是如此糟糕,你从哪儿弄来的?你想做什么,有人会指出你更好的参考,因为这是不应该使用的Java。 – matt

+0

@matt我刚刚访问了文件读取器主题。我忘记了基本知识。 ;) –

+0

因此,由于缺少字符编码,FileReader严重阻碍使用。更好的选择是使用[Files.newBufferedReader](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedReader-java.nio.file)。路径java.nio.charset.Charset-)。接下来你应该使用[ARM](https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html)。我的意思不是太消极,但是当你刚开始这个程序时,最好看看使用当前正确的技术。干杯。 – matt

你比较c - 一个char,这是一个无符号 - 与-1。不要这样做。它促进cint,所以你最终会以65535结束。取而代之的是让cint,然后在循环体内执行char

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

我还建议不要只为一个变量存储东西的缘故创建一个新的对象......你可以使用一个局部变量这里FileReader

我也想提醒:

  • 不只是持续的,如果抛出一个异常,仿佛什么都没有了问题
  • 使用try-与资源,而不是手动关闭读者
  • 避免FileReader开始,因为它始终使用默认编码。 (使用FileInputStreamInputStreamReader,或从Java 7只使用Files.newBufferedReader。)
+0

谢谢。我知道了。 :) –