Dav*_*vid 5 csv parsing opencsv java-8
我想尽可能快速高效地解析大型 CSV 文件。
目前,我正在使用 openCSV 库来解析我的 CSV 文件,但解析一个包含 10776 条记录和 24 个标题的 CSV 文件大约需要 10 秒,我想解析一个包含数百万条记录的 CSV 文件。
<dependency>
<groupId>com.opencsv</groupId>
<artifactId>opencsv</artifactId>
<version>4.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
我正在使用 openCSV 库使用下面的代码片段进行解析。
public List<?> convertStreamtoObject(InputStream inputStream, Class clazz) throws IOException {
HeaderColumnNameMappingStrategy ms = new HeaderColumnNameMappingStrategy();
ms.setType(clazz);
Reader reader = new InputStreamReader(inputStream);
CsvToBean cb = new CsvToBeanBuilder(reader)
.withType(clazz)
.withMappingStrategy(ms)
.withSkipLines(0)
.withSeparator('|')
.withFieldAsNull(CSVReaderNullFieldIndicator.EMPTY_SEPARATORS)
.withThrowExceptions(true)
.build();
List<?> parsedData = cb.parse();
inputStream.close();
reader.close();
return parsedData;
}
Run Code Online (Sandbox Code Playgroud)
我正在寻找另一种方法的建议,以在更短的时间内解析包含数百万条记录的 CSV 文件。
---更新了答案----
Reader reader = new InputStreamReader(in);
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
.withFirstRecordAsHeader()
.withDelimiter('|')
.withIgnoreHeaderCase()
.withTrim());
List<CSVRecord> recordList = csvParser.getRecords();
for (CSVRecord csvRecord : recordList) {
csvRecord.get("headername");
}
Run Code Online (Sandbox Code Playgroud)
回答
Reader reader = new InputStreamReader(in);
CSVParser csvParser = new CSVParser(reader, CSVFormat.DEFAULT
.withFirstRecordAsHeader()
.withDelimiter('|')
.withIgnoreHeaderCase()
.withTrim());
List<CSVRecord> recordList = csvParser.getRecords();
for (CSVRecord csvRecord : recordList) {
csvRecord.get("headername");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6170 次 |
| 最近记录: |