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

job*_*bin 1 java csv opencsv

我有大量需要写入 CSV 文件的 bean。我正在尝试使用 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);
}
Run Code Online (Sandbox Code Playgroud)

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

Sco*_*way 6

乔宾,严重的是,如果你使用的是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);
}
Run Code Online (Sandbox Code Playgroud)

  • 构造函数 StatefulBeanToCsvBuilder(CSVWriter) 不存在。 (2认同)
  • ledlogic - 你是完全正确的。我更正了上面的代码示例,因为 StatefulBeanToCsv 根据从构建器传入的值创建 CSVWriter,但它不直接采用 CSVWriter。不太清楚我五月份的想法,但谢谢你指出这一点,因为谁知道它会在那里停留多久。 (2认同)

And*_*eas 1

writeNext()循环调用,一次转换一个 bean。一点也不占内存。