首页 > 解决方案 > BufferedReader 从带有文本的文件中返回 null

问题描述

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

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 在没有读取一行文本的情况下到达文件末尾。

输入赞赏。

标签: javanullbufferedreader

解决方案


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

您编写的代码循环的每次迭代调用readLine()了三次......并且只捕获了三行文本中的一行。(准确地说,每三行。)

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

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

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


推荐阅读