我从文件中读取数据时遇到问题。 在每一行(除了第一行)之前,第一个字符丢失了!
也许我在编码方面遇到麻烦,但我尝试设置UTF-8,UniCode,ANSI,结果快速相同......
代码:
try (FileReader fr = new FileReader("123.txt")) {
// create a buffer for file reader
BufferedReader br = new BufferedReader(fr);
do {
input = br.readLine();
System.out.println(input);
} while (br.read() != -1);
} catch (IOException ex) {
System.out.println("IOex : " + ex);
}
控制台:
2
FFFFFF
FAF9F5
FDBCA1
FBCCB8
但必须是:
2
#FFFFFF
2
#FAF9F5
6
#FDBCA1
9
#FBCCB8
9
只有当我在行之前添加斜杠时它才有效。
2
\ #FFFFFF
\ 2
\#FAF9F5
\ 6
\#FDBCA1
\ 9
\#FBCCB8
\ 9
它能是什么?
谢谢!
答案 0 :(得分:3)
问题在于do
循环结束:
do {
input = br.readLine();
if (input.endsWith("\n")) {
input = input.substring(0, input.indexOf("\n"));
}
System.out.println(input);
} while (br.read() != -1);
您正在调用read()
,它将读取下一行的第一个字符 - 但您仅使用它来检查文件是否已结束。 (注意你是如何获得第一个行的第一个字符的,因为你之前没有调用readLine
就调用了read
。)
这样可以正常工作 - 并且更简单:
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
当您到达数据末尾时, readLine
会返回null
。请注意,您不必检查包含input
的{{1}},因为您一次只能阅读一行,并且\n
被视为行分隔符。