如何使用Apache Commons CSV计算CSV文件中的列数?我的目标是为CSVParser生成标题,只要我可以确定列数。
CSV文件示例:
0,1,0
1,2,3
2,3,4
...
在这种情况下,列数为3。所以我正在寻找的是:
CSVParser parser = format.parse(file);
CSVRecord firstRecord = parser.iterator().next();
int numColumns = firstRecord.size();
注意:我似乎能够解析文件就好了,只要他们在开头有一个额外的行并且我创建了一个格式,如下:
文件:的
asdf
0,1,0
1,2,3
2,3,4
...
格式:的
CSVFormat = format.withFirstRecordAsHeader().withSkipHeaderRecord()
答案 0 :(得分:0)
这已经来不及回答&不确定您使用的是哪个版本。 使用Apache commonCSV 1.4(JDK 6+),firstRecord.size()可用。
答案 1 :(得分:0)
我找到的解决方案是在文件内容之前添加假行,并使用滑动标题记录的格式。
public static CSVParser getParserForUnknownCSV(FileInputStream inputStream)
{
Byte[] fakeLine = ("fake line" + System.lineSeparator()).toByteArray();
ByteArrayInputStream fakeLineStream = new ByteArrayInputStream(fakeLine);
SequenceInputStream prependedStream = new SequenceInputStream(fakeLineStream, inputStream);
InputStreamReader prependedReader = new InputStreamReader(prependedStream)
CSVFormat formatWithFakeHeader = CSVFormat.DEFAULT
.withSkipHeaderRecord()
.withHeader("fake header")
.withAllowMissingColumnNames();
CSVParser parser = new CSVParser(prependedReader, formatWithFameHeader);
return parser;
}