広告 Java

JavaでCSVファイルを出力する方法

はじめに

JavaでCSVファイルを出力するには、Java標準で提供されているAPIを使うか、CSVファイルを扱うためのライブラリを使うかのどちらかです。

本記事では、Java標準で提供されているAPIを使いCSVファイル出力を行う方法について紹介します。

スポンサーリンク

JavaでCSVファイルを出力する方法

PrintWriterによる書き込み

JavaでCSVファイルを出力するには、書き込みに特化したクラスである「PrintWriter」を使うことで簡単に実装することができます。

次の例では、CsvDataBeanクラスに格納されている情報をCSVファイルに出力しています。また今回の例では、文字コードを「Shift-JIS」にしています。

[PrintWriterの使用例]

package file.csv;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

public class CsvWriteSample {
    /*** 文字コード */
    private static final String CSV_CHARSET = "Shift-JIS";
    /*** 改行コード */
    private static final String LINE_FEED_CODE = System.getProperty("line.separator");
    /*** 区切り文字(カンマ) */
    private static final String DELIMITER_COMMA = ",";

    public static void main(String[] args) {
        // CSVファイルに書き込みするためのデータ作成
        List<CsvDataBean> list = new ArrayList<CsvDataBean>();
        list.add(new CsvDataBean("1","山田一郎","30","東京都渋谷区"));
        list.add(new CsvDataBean("2","佐藤二郎","25","大阪府大阪市"));
        list.add(new CsvDataBean("3","鈴木三郎","22","神奈川県横浜市"));

        // CSVファイル作成
        CsvWriteSample csvWriteSample = new CsvWriteSample();
        csvWriteSample.writeCsv("C:\\work\\test2.csv", list);
    }

    private void writeCsv(String file, List<CsvDataBean> list) {

        try (PrintWriter pw = new PrintWriter(file, CSV_CHARSET)) {
            // ヘッダ情報
            pw.print("No");
            pw.print(DELIMITER_COMMA);
            pw.print("名前");
            pw.print(DELIMITER_COMMA);
            pw.print("年齢");
            pw.print(DELIMITER_COMMA);
            pw.print("住所");
            pw.print(LINE_FEED_CODE);

            for(CsvDataBean bean : list) {
                pw.print(bean.getNo());
                pw.print(DELIMITER_COMMA);
                pw.print(bean.getName());
                pw.print(DELIMITER_COMMA);
                pw.print(bean.getAge());
                pw.print(DELIMITER_COMMA);
                pw.print(bean.getAddress());
                pw.print(LINE_FEED_CODE);
            }
        } catch (IOException e) {
            // ここにエラー処理
        }
    }
}

 

上記の例では、close漏れがないように「try-with-resources」を使用しています。(※try-with-resources文は、処理の終わりで各リソースを確実に閉じてくれる)

[出力されたCSVファイル]

No,名前,年齢,住所
1,山田一郎,30,東京都渋谷区
2,佐藤二郎,25,大阪府大阪市
3,鈴木三郎,22,神奈川県横浜市

[CsvDataBeanクラス]

/**
 * CSVファイルの内容を格納するBeanクラス
 */
public class CsvDataBean {
    /**
     * コンストラクタ
     * @param no No
     * @param name 名前
     * @param age 年齢
     * @param address 住所
     */
    public CsvDataBean(String no, String name, String age, String address) {
        this.no = no;
        this.name = name;
        this.age = age;
        this.address = address;
    }

    /**
     * No
     */
    private String no;
    /**
     * 名前
     */
    private String name;
    /**
     * 年齢
     */
    private String age;
    /**
     * 住所
     */
    private String address;
    /**
     * Noの取得
     * @return No
     */
    public String getNo() {
        return no;
    }
    /**
     * Noの設定
     * @param no No
     */
    public void setNo(String no) {
        this.no = no;
    }
    /**
     * 名前の取得
     * @return 名前
     */
    public String getName() {
        return name;
    }
    /**
     * 名前の設定
     * @param name 名前
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * 年齢の取得
     * @return 年齢
     */
    public String getAge() {
        return age;
    }
    /**
     * 年齢の設定
     * @param age 年齢
     */
    public void setAge(String age) {
        this.age = age;
    }
    /**
     * 住所の取得
     * @return 住所
     */
    public String getAddress() {
        return address;
    }
    /**
     * 住所の設定
     * @param address 住所
     */
    public void setAddress(String address) {
        this.address = address;
    }
}

helpful