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

Java如何解决BufferedReader读取文件在while循环外返回值为null的问题

问题根因

你的代码返回null的核心原因是:while循环的终止条件是contentLine == null,当循环退出时,contentLine已经被赋值为最后一次readLine()的返回值也就是null,自然返回结果为空。同时你只在循环中打印了每行内容,没有将读取到的所有行拼接存储,无法返回完整的文件内容。

修正方案

你需要新增一个字符串拼接容器(推荐用StringBuilder),在循环中把每次读取到的行拼接进去,最终返回拼接后的完整内容即可。同时建议使用Java 7+提供的try-with-resources语法自动关闭IO流,避免资源泄漏。
修正后的代码如下:

public String readJsonFile(String fileLocation) throws IOException {
    // 用try-with-resources自动关闭BufferedReader,无需手动调用close方法
    try (BufferedReader br = new BufferedReader(new FileReader(fileLocation))) {
        StringBuilder contentSb = new StringBuilder();
        String contentLine = br.readLine();
        while (contentLine != null) {
            System.out.println(contentLine);
            contentSb.append(contentLine); // 把当前读取到的行拼接到容器中
            contentLine = br.readLine();
        }
        return contentSb.toString(); // 返回拼接完成的完整文件内容
    }
}

补充说明

  • 如果你的JSON文件是单条JSON结构,返回的字符串可以直接传给Jackson、Gson等JSON解析库完成反序列化;如果是每行一条JSON的结构,可以在循环中逐行解析,也可以拼接后再处理。
  • 如果需要指定文件编码避免乱码,可以把BufferedReader的初始化替换为:
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileLocation), StandardCharsets.UTF_8))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:08