如何使用Apache Commons CSV计算CSV中的列数?

时间:2016-06-14 20:58:51

标签: csv header apache-commons

如何使用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()

2 个答案:

答案 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;
}