如何在Apache Commons CSV解析记录时跳过#标记的注释行
问题根因
CSVFormat是不可变类,所有配置修改操作只会返回全新的配置实例,不会修改原有对象。你调用setCommentMarker后没有接收返回的新实例,原有csvFormat仍然是默认配置,因此注释标记不生效。
修正后代码
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVRecord; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.io.Reader; Reader reader = Files.newBufferedReader(Paths.get(filename), StandardCharsets.UTF_16LE); // 链式调用配置后build得到生效的配置实例 CSVFormat csvFormat = CSVFormat.DEFAULT.builder() .setCommentMarker('#') // 其他配置(如设置表头、忽略空行等)可在此处追加 .build(); Iterable<CSVRecord> records = csvFormat.parse(reader); char marker = csvFormat.getCommentMarker(); // 可正确返回'#' for (CSVRecord record : records) { if (record.isSet(SHEET_COLUMN_1)) { // TODO } }
注意事项
- 所有
CSVFormat的配置修改都需要接收返回的新实例,不要在原有实例上调用配置方法后不赋值 - 若有其他配置需求,都可以在builder链式调用中统一添加,最后一次性build生成最终配置
内容的提问来源于stack exchange,提问作者Maan Boushi
相关产品推荐
相关产品推荐

