java - 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 在没有读取一行文本的情况下到达文件末尾。
输入赞赏。
解决方案
每次您调用readLine()
时,缓冲的阅读器都会尝试读取一行。
您编写的代码为循环的每次迭代调用readLine()
了三次......并且只捕获了三行文本中的一行。(准确地说,每三行。)
看起来你已经看到了下面的成语,并在没有完全理解的情况下尝试使用它:
String line;
while ((line = br.readLine()) != null) {
sb.append(line + "\n");
}
请注意,您必须捕获readLine()
调用结果并将其存储在变量中。
推荐阅读
- email - 为什么电子邮件主题包含换行符或回车符?
- node.js - 如何通过 vision api 使用谷歌云存储
- java - 在 Java 中创建自定义 onError 和 onLoad 方法
- c# - 使用 multipart/form-data 在服务器中上传文件 - C#
- c++ - 两个以上向量的 std::transform
- python - 使用正则表达式拆分,但使用分隔符的第一个字符
- google-analytics - AMP amp-analytics 中的 Google UTM 活动跟踪
- c# - 是否可以在 Asp Net Core Api 中使用通配符为部分随机 url 设置 cors 规则?
- flutter - 颤动我如何从中间圆一个容器
- javascript - 如何在没有第三方库的情况下在浏览器上加密消息并在节点服务器上解密?