带有文本的文件中的 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()
调用的结果并将其存储在变量中。
我的程序使用 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()
调用的结果并将其存储在变量中。