Java 当csvParser中有记录时,getRecords()返回空
我使用以下依赖项读取csv文件: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
<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));}”给出的值为空。