我的程序使用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到达文件末尾的原因。
感谢输入。
答案 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()
调用的结果并将其存储在变量中。