【发布时间】:2018-04-22 11:41:05
【问题描述】:
以下方法允许使用跳过标题进行阅读:
Iterable<CSVRecord> records = CSVFormat.EXCEL.withHeader().parse(in);
for (CSVRecord record : records) {
//here first record is not header
}
如何读取包含标题行的 csv?
附言
方法:
CSVFormat.EXCEL.withHeader().withSkipHeaderRecord(false).parse(in)
不起作用并且具有相同的行为
【问题讨论】:
-
@Berger,我稍微更正了代码。是的 - 现在是实际代码
-
public final class CSVParser 实现 Iterable
, Closeable { -
这不是一件容易的事,如果您查看
CSVParser从其构造函数调用的initializeHeader方法,您会看到nextRecord()被调用并跳过第一个你的情况下的行(format.getHeader()是一个大小为 0 的数组)。看。 commons.apache.org/proper/commons-csv/apidocs/src-html/org/… 。为什么会有这个要求? -
@Berger 我做了解决方法并在循环之前调用了 records.getHeaderMap().keySet() 以获取标题。在处理之前我需要做一些额外的检查。
-
好吧,这似乎是最好的解决方案。
标签: java csv parsing header apache-commons-csv