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



我有一个很大的 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);
}

在循环中调用writeNext(),一次转换一个 bean。一点也不昂贵的内存。

最新更新