一般社団法人 全国個人事業主支援協会

COLUMN コラム

前回は「単純なデータを書き込む」についてご紹介させていただきました。今回は「JavaオブジェクトをCSVファイルに書き込む方法」について説明します。

1. JavaオブジェクトをCSVファイルに書き込む

OpenCSVは、Javaオブジェクトを直接CSVファイルに書き込むこともサポートしています。これには、StatefulBeanToCsvクラスを使用します。

1.1. Javaオブジェクトの定義

まず、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を省略します。
}

1.2. オブジェクトのリストを書き込む

次に、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();
    }
  }
}

2. その他のカスタマイズオプション

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ファイルを生成してください。


この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア