首页 > 解决方案 > 当 CSVParser 中有记录时,csvParser.getRecords() 返回空

问题描述

我正在使用以下依赖项来读取 csv 文件:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.5</version>
</dependency>

下面是我为读取 csv 文件而编写的代码:

Reader reader = Files.newBufferedReader(Paths.get(file.getPath()));
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT);
for(CSVRecord csvRecord: csvParser) {
     System.out.println(csvRecord.get(0));
}

我可以通过上述方法从 csv 文件中读取每一行。但是 csvParser.getRecords(); 返回空。我想要 CSV 文件中的总行数。我怎样才能做到这一点?

标签: javacsvjava-8apache-commons-csv

解决方案


仔细阅读getRecords() javadoc (重点是我的):

返回的内容从流中的当前解析位置开始。

你说 :

但是 csvParser.getRecords(); 返回空。我想要 CSV 文件中的总行数。我怎样才能做到这一点?

您必须csvParser.getRecords().size();在迭代记录之前调用。然后迭代它们。

例如 :

List<Records> records = csvParser.getRecords();
int nbRecords = records.size();
for(CSVRecord csvRecord: records) {
     System.out.println(csvRecord.get(0));
}

推荐阅读