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