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

使用BufferedReader读取文件时,如何判断行非空并避免空指针异常?

解决BufferedReader读取空行引发空指针异常的问题

嘿,我完全懂你踩的这个坑——用BufferedReader读文件时,空行或者全是空白字符的行,再加上没处理好null的情况,很容易让trim()触发空指针异常。毕竟当文件读到末尾时,readLine()会返回null,这时候直接调用trim()肯定炸。下面给你几个实用的解决思路:

基础方案:先判null,再trim+判空

这是最稳妥且不需要额外依赖的方法,核心是两步判断:

  1. 先检查readLine()的返回值是否为null(避免文件读完后触发空指针)
  2. 对非null的行,调用trim()后判断是否为空字符串(跳过全空白的行)

示例代码如下:

String line;
// 用try-with-resources自动关闭流,避免资源泄漏
try (BufferedReader br = new BufferedReader(new FileReader("your-file-path.txt"))) {
    // 循环读取每一行,直到readLine()返回null
    while ((line = br.readLine()) != null) {
        String trimmedLine = line.trim();
        // 只处理trim后非空的行
        if (!trimmedLine.isEmpty()) {
            // 这里写你的业务逻辑,比如教授要求的处理操作
            processLine(trimmedLine);
        }
    }
} catch (IOException e) {
    // 异常处理,比如打印日志或抛出自定义异常
    e.printStackTrace();
}

这个方案能完美跳过两种“无效行”:

  • 文件末尾的null值
  • 原行是全空白(空格、制表符、换行符等)的情况,trim后变成空字符串

进阶方案:用工具类简化判断(如果有依赖的话)

如果你项目里已经引入了Apache Commons Lang库,那可以用StringUtils.isNotBlank()方法,它会一次性帮你处理null、空字符串、全空白字符串的情况,代码更简洁:

String line;
try (BufferedReader br = new BufferedReader(new FileReader("your-file-path.txt"))) {
    while ((line = br.readLine()) != null) {
        if (StringUtils.isNotBlank(line)) {
            String trimmedLine = line.trim();
            // 处理有效行
            processLine(trimmedLine);
        }
    }
} catch (IOException e) {
    e.printStackTrace();
}

不过如果不想为了这一个功能引入第三方依赖,基础方案就足够好用了。

关键注意事项

  • 顺序不能乱:一定要先判断line != null,再调用trim()——null调用任何方法都会抛出空指针异常,这是你当前问题的核心原因。
  • 区分空行和空白行:如果只是想跳过完全没有字符的空行(readLine()返回""),那可以在trim前判断,但通常我们需要跳过的是所有包含空白字符的行,所以trim后判断isEmpty()更准确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:47:51