用BufferedReader读取错误

时间:2013-10-06 08:30:16

标签: java file-io bufferedreader

我从文件中读取数据时遇到问题。 在每一行(除了第一行)之前,第一个字符丢失了!

也许我在编码方面遇到麻烦,但我尝试设置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

它能是什么?
谢谢!

1 个答案:

答案 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被视为行分隔符。