2016-06-14 73 views
0

如何计算使用Apache Commons CSV的CSV文件中的列数?我的目标是为CSVParser生成头文件,只要我可以确定列数。如何使用Apache Commons CSV统计CSV的列数?

例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

我找到的解决方案是在文件的内容之前加一个假行,并使用滑动标题记录的格式。

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; 
} 
0

这是来不及回答&您正在使用的版本不知道。 使用Apache commonCSV 1.4(JDK 6+),firstRecord.size()可用。

+0

我确实找到了答案,只是忘了发布它。上面的答案。使用firstRecord.size()的问题在于,如果标题列太多或太少,并且绝对需要标题,公共CSV会拒绝该文件。 – Gladclef