前回は「単純なデータを書き込む」についてご紹介させていただきました。今回は「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ファイルを生成してください。