java - 如何使用 OpenCSV 将 bean 写入 CSV,而不转换为 String[]?

标签 java csv opencsv

我有一个很大的 bean 数组需要写入 CSV 文件。我正在尝试使用 OpenCSV,但我在网上看到的所有示例都要求我将我拥有的 bean (POJO) 转换为字符串数组。我不想这样做,因为这意味着我将不得不遍历数百万个 bean,并将每个 bean 转换为 String[],这将是一个非常消耗内存的过程。

这是我现在执行此操作的代码片段:

private static void writeRowsToCsv(Path filePath, List<MyBean> rows)
        throws IOException {

    StringWriter writer = new StringWriter();
    CSVWriter csvWriter = new CSVWriter(writer, '#', '\'');
    ColumnPositionMappingStrategy mappingStrategy =
            new ColumnPositionMappingStrategy();
    mappingStrategy.setType(MyBean.class);
    List<String[]> rowsInStringArray = convertBeanToStringArray(rows)
    csvWriter.writeAll(rowsInStringArray);
}

有没有办法可以避免转换为 String[] 并使用必须写入 CSV 文件的 bean 列表?

最佳答案

Jobin,说真的,如果您使用 OpenCSV,那么请使用 BeanToCsv 或更新的 StatefulBeanToCsv。它会拯救你的理智。

private static void writeRowsToCsv(Path filePath, List<MyBean> rows)
        throws IOException {

    StringWriter writer = new StringWriter();
    ColumnPositionMappingStrategy mappingStrategy =
            new ColumnPositionMappingStrategy();
    mappingStrategy.setType(MyBean.class);

    StatefulBeanToCsvBuilder<MyBean> builder = new StatefulBeanToCsvBuilder(writer);
    StatefulBeanToCsv beanWriter = builder
              .withMappingStrategy(mappingStrategy)
              .withSeparator('#')
              .withQuotechar('\'')
              .build();

    beanWriter.write(rows);
}

关于java - 如何使用 OpenCSV 将 bean 写入 CSV,而不转换为 String[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43326129/

相关文章:

java - 以编程方式在 BigQuery 的数据集中创建表

c# - 如何配置 CsvHelper 以跳过 MissingFieldFound 行

csv - 使用 bash 或 awk 打乱大型 csv 文件的行和列

java - 如何在 Java 中从 CSVWriter 创建新列

java - 如何在不创建额外的 WUF 对象或使用复杂度 >= O(n) 的方法的情况下处理渗透中的反冲洗问题?

java - Java swing 应用程序中 JMenuBar Flyout 的问题

java - 获取 EditText 的字符数

python - 如何在 TensorFlow 中读取 csv?

java - OpenCSV 写入限制

java - OpenCSV 引用空值