簡體   English   中英

如何在不轉換為String []的情況下使用OpenCSV將Bean寫入CSV?

[英]How to write bean to CSV using OpenCSV without converting to 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。 完全不消耗內存。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM