文件读取器无法正常工作?
问题描述:
我有下面的代码,由于某种原因文件的末尾永远不会到达,所以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
- 一个char
,这是一个无符号型 - 与-1。不要这样做。它促进c
到int
,所以你最终会以65535结束。取而代之的是让c
为int
,然后在循环体内执行char
。
int c;
while ((c = ob.fr.read()) != -1) {
System.out.println((char) c);
}
我还建议不要只为一个变量存储东西的缘故创建一个新的对象......你可以使用一个局部变量这里FileReader
。
我也想提醒:
- 不只是持续的,如果抛出一个异常,仿佛什么都没有了问题
- 使用try-与资源,而不是手动关闭读者
- 避免
FileReader
开始,因为它始终使用默认编码。 (使用FileInputStream
与InputStreamReader
,或从Java 7只使用Files.newBufferedReader
。)
+0
谢谢。我知道了。 :) –
这是如此糟糕,你从哪儿弄来的?你想做什么,有人会指出你更好的参考,因为这是不应该使用的Java。 – matt
@matt我刚刚访问了文件读取器主题。我忘记了基本知识。 ;) –
因此,由于缺少字符编码,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