如何使用 Java 中的某些解析器在低内存中解析 csv?

How can I parse a csv in low memory, using some parser in Java?

我使用了 InputStream,在解析时,如果一列中有一个 ",",那么它会将其视为一个单独的列。 前 - abc, xyz, "m,n" 那么解析后的输出是 abc , xyz, m, n 这里 m 和 n 被视为单独的列。

我真的很喜欢 Apache Commons CSVParser。这几乎是他们的用户指南中的逐字记录:

Reader reader = new FileReader("input.csv");
final CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT);
try {
    for (final CSVRecord record : parser) {
        final String string = record.get("SomeColumn");
        ...
    }
} finally {
    parser.close();
    reader.close();
}

这很简单,可配置且面向行。

您可以这样配置:

final CSVParser parser = new CSVParser(reader, CSVFormat.DEFAULT.withHeader().withDelimiter(';'));

郑重声明,此配置是不必要的,因为 CSVFormat.DEFAULT 完全按照您希望的方式工作。

这将是我第一次尝试查看它是否适合内存。如果没有,您能否更具体地说明低内存占用量?

像这样的第三方csv解析库有很多

  1. UniVocity Parser

  2. CommonsCsv Parser

  3. OpenCsv Parser

  4. SuperCsv Parser

我正在使用 UniVocity csv 解析器,它速度非常快,可以自动检测行中的分隔符。您可以浏览上面给出的 csv 库。