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
相关产品推荐
相关产品推荐

