前回は「単純なデータを書き込む」についてご紹介させていただきました。今回は「JavaオブジェクトをCSVファイルに書き込む方法」について説明します。
OpenCSVは、Javaオブジェクトを直接CSVファイルに書き込むこともサポートしています。これには、StatefulBeanToCsvクラスを使用します。
まず、CSVに書き込むデータを保持するJavaクラスを定義します。このクラスには、@CsvBindByNameアノテーションを使用して、CSVファイルの列とオブジェクトのフィールドを関連付けます。
import com.opencsv.bean.CsvBindByName;
public class User {
  @CsvBindByName(column = "Name")
  private String name;
  @CsvBindByName(column = "Age")
  private int age;
  @CsvBindByName(column = "Country")
  private String country;
  public User() {}
  public User(String name, int age, String country) {
    this.name = name;
    this.age = age;
    this.country = country;
  }
  // Gettersとsettersを省略します。
}
次に、StatefulBeanToCsvを使って、上記のUserオブジェクトのリストをCSVファイルに書き込みます。
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class BeanToCsvWriteExample {
  public static void main(String[] args) {
    // CSVに書き込むUserオブジェクトのリストを作成
    List<User> users = new ArrayList<>();
    users.add(new User("テスラ", 30, "USA"));
    users.add(new User("トヨタ", 35, "JAPAN"));
    try (FileWriter writer = new FileWriter("output.csv")) {
      // StatefulBeanToCsvのインスタンスを作成
      StatefulBeanToCsv<User> beanToCsv = new StatefulBeanToCsvBuilder<User>(writer).build();
      // オブジェクトのリストを書き込む
      beanToCsv.write(users);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
StatefulBeanToCsvBuilderには、いくつかのカスタマイズオプションがあります。
import com.opencsv.bean.StatefulBeanToCsv;
import com.opencsv.bean.StatefulBeanToCsvBuilder;
import com.opencsv.bean.ColumnPositionMappingStrategy;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CustomBeanToCsvWriteExample {
  public static void main(String[] args) {
    List<User> users = new ArrayList<>();
    users.add(new User("テスラ", 30, "USA"));
    users.add(new User("トヨタ", 35, "JAPAN"));
    try (FileWriter writer = new FileWriter("output.csv")) {
      ColumnPositionMappingStrategy<User> mappingStrategy = new ColumnPositionMappingStrategy<>();
      mappingStrategy.setType(User.class);
      String[] columns = {"name", "age", "country"};
      mappingStrategy.setColumnMapping(columns);
      StatefulBeanToCsv<User> beanToCsv = new StatefulBeanToCsvBuilder<User>(writer)
      // カスタマイズマッピング
      .withMappingStrategy(mappingStrategy)
      // フィールドをクォートで囲む処理を省略する
      .withQuotechar(CSVWriter.NO_QUOTE_CHARACTER)
      .build();
      beanToCsv.write(users);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}
OpenCSVを使用することで、JavaアプリケーションからCSVファイルへのデータの書き込みが容易になります。カスタムセパレータ、クォート文字、オブジェクトのマッピングなど、様々なニーズに対応できるよう柔軟にカスタマイズすることが可能です。使用する機能やオプションに応じて、最適な設定を選択し、効率的にCSVファイルを生成してください。