我有以下代码,由于某种原因,永远不会到达文件末尾,因此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 :(得分:6)
您将c
- char
(无符号类型)与-1进行比较。不要那样做。它会将c
提升为int
,因此您最终会使用65535。相反,将c
设为int
并在循环体内进行转换为char
。
int c;
while ((c = ob.fr.read()) != -1) {
System.out.println((char) c);
}
我还建议不要为了在变量中存储某些东西而创建一个新对象......你可以在这里使用FileReader
的局部变量。
我也建议:
FileReader
开头,因为它始终使用默认编码。 (将FileInputStream
与InputStreamReader
一起使用,或者从Java 7使用Files.newBufferedReader
。)