我的程序使用Polybuis密码对字符串进行编码,其中给定字符串中的每个字符由两个编码字符表示。编码的消息是通过创建一个 char 数组并将消息中的每个字符追加到字符串生成器中,后跟一个空格来构建的。
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 FFAD AG GV GG VF AF XG FA FD DG DF DD FD FF DF GX FFXG 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();
我无法弄清楚为什么缓冲阅读器在没有读取一行文本的情况下到达文件末尾。
感谢投入。
每个 br.readLine(( 调用将读取下一行。因此,您的 while 循环每次迭代将读取 3 行。通常,您希望将读取行存储到变量中进行处理,并且每次迭代只调用一次readLine((。
String line = br.readLine()
while (line != null) {
// do stuff with line
line = br.readLine()
}
每次调用 readLine()
时,缓冲的读取器都会尝试读取一行。
您编写的代码在循环的每次迭代中调用readLine()
三次......并且仅捕获三行文本中的一行。 (准确地说,每三行一次。
看起来您已经看到了以下成语,并尝试在没有完全理解它的情况下使用它:
String line;
while ((line = br.readLine()) != null) {
sb.append(line + "n");
}
请注意,您必须捕获readLine()
调用的结果并将其存储在变量中。