You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java读取文件文本行时输出结果末尾出现null的原因排查

null值产生原因

末尾的null和文件读取过程无关,是方法返回值被二次打印导致的:

  • BufferedReader.readLine()读到文件末尾时,固定返回null作为读取结束的标识。你的循环里每次都会先把br.readLine()的结果赋值给line变量,再判断是否为null,当读到文件末尾触发break跳出循环时,line已经被赋值为null
  • 你的readEncryptionFile()方法最后直接返回了这个line变量,而main方法中又写了System.out.println(file.readEncryptionFile()),这行代码会把方法返回的null打印到控制台,就出现了正确内容后额外多一行null的现象
  • 你在循环内部已经正确打印出了文件里的Hello World!!!,后面的null完全是main方法打印返回值产生的多余输出。
修复方法

根据你的需求二选一即可:

  • 如果只是要在方法内部打印文件内容,不需要返回读取结果:把readEncryptionFile()的返回值改成void,同时把main方法里的System.out.println(file.readEncryptionFile());改成直接调用方法file.readEncryptionFile();即可
  • 如果需要拿到读取到的文件内容做后续处理:调整读取逻辑,不要把文件末尾的null作为结果返回,参考修正后的实现:
public String readEncryptionFile() {
    File file = new File("C:\\Test\\EncryptionFile.txt");
    StringBuilder fileContent = new StringBuilder();
    String line;
    // 标准的BufferedReader读取写法,读到null直接终止循环,不会把null赋值给返回结果
    try (BufferedReader br = new BufferedReader(new FileReader(file))) {
        while ((line = br.readLine()) != null) {
            System.out.print(line);
            fileContent.append(line);
            // 如果需要保留文件原有的换行,可追加 fileContent.append(System.lineSeparator());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return fileContent.toString();
}

额外提醒:你代码中写入文件的路径是C:\Users\Dell\Training\DecryptionFile.txt,读取文件的路径是C:\Test\EncryptionFile.txt,两个路径指向的不是同一个文件,测试时请确认读取的目标文件内确实存在对应内容,避免出现读不到内容的问题。

内容的提问来源于stack exchange,提问作者cherokeexxx1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:18:17