带有文本的文件中的 BufferedReader returns null

BufferedReader returns null from a file with text

我的程序使用 Polybuis 密码对字符串进行编码,其中给定字符串中的每个字符由两个编码字符表示。 编码消息是通过创建一个字符数组并将消息中的每个字符附加到 StringBuilder 的两个字符,后跟 space.

来构建的
for (int add = 2; add < finalEncodedMessage.length; add+=2) {
            encodedMessageWithSpaces.append(' ');
            encodedMessageWithSpaces.append(finalEncodedMessage[add]);
            encodedMessageWithSpaces.append(finalEncodedMessage[add+1]);
        }

最终消息由字符串表示,并使用 BufferedWriter 保存到文件:

outputFile = selectedFile;
        try {
            bufferedOutput = new BufferedWriter(new FileWriter(outputFile));
            bufferedOutput.write(encrytedText);
            bufferedOutput.flush();

            bufferedOutput.close();

问题是当我尝试读取此文件时,无论内容如何,​​我都得到空值:

文件内容加密文本示例:

FA DD FF VF XF FF AD AG GV GG VF AF XG FA FD DG DF DD FD FF DF GX FF XG FA VG GG FA DF VX FA FG FF FD DF GF DD VG GD DD XG

读取文件重新运行 null:

StringBuilder sb = new StringBuilder();
        if (fileName.exists()) {
            try {

                BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));


                while ((br.readLine()) != null) {
                    System.out.println(br.readLine());
                    sb.append(br.readLine() + "\n");
                }

                br.close();

我不明白为什么 BufferedReader 没有读取一行文本就到达文件末尾。

感谢输入。

每次 br.readLine() 调用都会读取下一行。因此,您的 while 循环每次迭代将读取 3 行。 通常您想将读取的行存储到一个变量中进行处理,并且每次迭代只调用一次 readLine()。

String line = br.readLine() 
while (line != null) {
    // do stuff with line
    line = br.readLine()
}

每次调用 readLine() 时,缓冲的 reader 都会尝试读取一行。

您的代码 如您所写 为循环的每次迭代调用 readLine() 三次...并且仅捕获三行中的一行文本。 (准确地说是每三行一次。)

看来您已经看到了以下成语并在没有完全理解的情况下尝试使用它:

    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line + "\n");
    }

请注意,您必须捕获 readLine() 调用的结果并将其存储在变量中。