csv - 在 Java 中解析大型 CSV 文件的最快最有效的方法

标签 csv parsing java-8 opencsv

我想尽可能快速高效地解析大型 CSV 文件。

目前,我正在使用 openCSV 库来解析我的 CSV 文件,但是解析一个 CSV 文件大约需要 10 秒,该文件有 10776 条记录,其中 24 标题,我想解析一个包含数百万条记录的 CSV 文件。

<dependency>
  <groupId>com.opencsv</groupId>
  <artifactId>opencsv</artifactId>
  <version>4.1</version>
</dependency>

我正在使用以下代码片段解析 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;
    }

我正在寻找另一种方法的建议,以在更短的时间内解析包含数百万条记录的 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");
         }

最佳答案

回答

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");
         }

关于csv - 在 Java 中解析大型 CSV 文件的最快最有效的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56453492/

相关文章:

r - R 中的 Double 不带小数导入

Powershell - 将输出连接到 csv 文件

python - 如何在 Python 中使用 Azure Function 创建 CSV 文件下载

python - 如何在 Python 中记录和保存带有日期和时间戳的文件

parsing - Haskell 和秒差距 : Parsing two separated lists of numbers

parsing - 如果从文件中读取,Parsec 将失败且没有错误

php - PHP解析/语法错误;以及如何解决它们

java - 排查Nashorn "Method code too large!"异常

java - macOS 上的 AudioInputStream : Pop noise with Java 1. 7 和 1.8 以及 8 位 wav 文件

用于 int 范围的 Java 8 IntStream?