如何在不转换为 String[] 的情况下使用 OpenCSV 将 bean 写入 CSV?
How to write bean to CSV using OpenCSV without converting to String[]?
我有大量需要写入 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);
}
有没有一种方法可以避免转换为 String[]
并使用必须写入 CSV 文件的 bean 列表?
您在循环中调用 writeNext()
,一次转换一个 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);
}
我有大量需要写入 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);
}
有没有一种方法可以避免转换为 String[]
并使用必须写入 CSV 文件的 bean 列表?
您在循环中调用 writeNext()
,一次转换一个 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);
}