Java 当csvParser中有记录时,getRecords()返回空

Java 当csvParser中有记录时,getRecords()返回空,java,csv,java-8,apache-commons-csv,Java,Csv,Java 8,Apache Commons Csv,我使用以下依赖项读取csv文件: <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-csv</artifactId> <version>1.5</version> </dependency> Reader reader = Files.newBufferedReader(Paths.g

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

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.5</version>
</dependency>
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文件中的总行数。我该怎么做呢?

您可以
流式处理
执行的所有
操作,因此您应该能够

StreamSupport.stream(csvParser.spliterator(), false).count()
注意:它仍然会以这种方式分配记录(不必要)。

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

返回的内容从 小溪

你说:

但是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));
}
List records=csvParser.getRecords();
int nbRecords=records.size();
用于(CSVRecord CSVRecord:记录){
System.out.println(csvRecord.get(0));
}
有一个内置的
getInputDimension
例程,可以为您提供这些信息-它应该比您尝试使用commons csv的速度至少快6倍

这一班轮可以做到:

int lines = new CsvRoutines().getInputDimension(new File("/path/to/your.csv")).rowCount();
希望这有帮助


免责声明:我是这个图书馆的作者。它是开源和免费的(Apache 2.0许可证)

我认为应该将它分配给数组列表,因为CSVParser释放了列表的内存`

CSVParser csvParser = CSVParser.parse(multipartFileStream, StandardCharsets.US_ASCII,
                CSVFormat.EXCEL);
                List<CSVRecord> listCsvRecord =  new ArrayList<>();
                listCsvRecord.addAll(csvParser.getRecords());
            `
CSVParser CSVParser=CSVParser.parse(multipartFileStream,StandardCharsets.US_ASCII,
CSVFormat.EXCEL);
List listCsvRecord=new ArrayList();
listCsvRecord.addAll(csvParser.getRecords());
`

它应该分配给某个列表变量。那应该很好。“for(CSVRecord CSVRecord:csvParser.getRecords()){System.out.println(CSVRecord.get(0));}”给出的值为空。