如何在读取文件时忽略含空值的整行?附Java代码示例
解决CSV空值行忽略问题
当然有办法处理这种情况!你现在的代码会因为空值行出现数组越界或者无效数据的问题——比如像5,fee,这种行,用split(COMMA_DELIMITER)拆分后虽然数组长度是3,但最后一个元素是空字符串,不符合你要忽略整行的需求;如果是5,,20这种中间字段为空的行,同样需要过滤掉。
我们可以通过增加行有效性校验逻辑来实现忽略空值行,具体调整如下:
- 首先确保拆分后的数组长度严格等于3(对应你的CSV固定格式
person_number,name,age三个字段) - 然后检查每个字段都不为空字符串(如果需要的话,还可以加上
trim()过滤纯空白的情况)
修改后的代码片段如下:
while (((line = br.readLine()) != null)) { String[] employeeDetails = line.split(COMMA_DELIMITER); // 校验行有效性:字段数正确且所有字段非空 if (employeeDetails.length == 3 && !employeeDetails[0].trim().isEmpty() && !employeeDetails[1].trim().isEmpty() && !employeeDetails[2].trim().isEmpty()) { try { ADInputFile emp = new ADInputFile(employeeDetails[0], employeeDetails[1], employeeDetails[2]); empList.add(emp); } catch (Exception e) { // 可选:处理其他异常,比如age不是数字的情况 System.out.println("处理行失败: " + line + ", 错误信息: " + e.getMessage()); } } // 不符合校验条件的行会被自动跳过 }
额外提示:
如果你的CSV后续可能出现带逗号的字段(比如"Smith, John",25),简单的split(",")会拆分错误,建议使用成熟的CSV解析库(比如OpenCSV),它能正确处理带引号的特殊字段,避免出现意外的拆分问题。
内容的提问来源于stack exchange,提问作者bharath s
相关产品推荐
相关产品推荐

