BufferedReader从文本文件返回null

时间:2019-06-09 23:05:50

标签: java null bufferedreader

我的程序使用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();

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

文件内容带有加密文本的示例:

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

读取文件重新运行为空:

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到达文件末尾的原因。

感谢输入。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:2)

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

您编写的代码 对于循环的每次迭代都会调用readLine() 3次,并且仅捕获三行文本中的一行。 (确切地说,每三行。

您似乎已经看过以下惯用语,并在未完全理解的情况下尝试使用它:

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

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