JavaのCSVファイルのライブラリ「Super CSV」にアノテーション機能を追加したライブラリ

スポンサーリンク

Maven

MavenプロジェクトでSuper CSV Annotationを使うには、pom.xmlに依存関係を次のように記述する。

<dependency>
    <groupId>com.github.mygreen</groupId>
    <artifactId>super-csv-annotation</artifactId>
    <version>2.1</version>
</dependency>

Super CSV Annotationはロギングライブラリ「SLF4J (Simple Logging Facade for Java)」を使っているため、SLF4Jの実装も依存関係に追加する必要がある。

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.1</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.14</version>
</dependency>

サンプル

Apache Commons CSVでCSVファイルを読み込むサンプルを示す。

package com.fc2web.itref.examples.supercsv;

import com.github.mygreen.supercsv.annotation.CsvBean;
import com.github.mygreen.supercsv.annotation.CsvColumn;

@CsvBean(header=false)
public class EmpCsv {

    /** 社員番号 */
    @CsvColumn(number=1)
    private int empno;

    /** 氏名 */
    @CsvColumn(number=2)
    private String ename;

    /** コンストラクタ */
    public EmpCsv() {

    }

    /**
     * 社員番号の取得
     *
     * @return 社員番号
     */
    public int getEmpno() {
        return empno;
    }

    /**
     * 社員番号の設定
     *
     * @param empno 社員番号
     */
    public void setEmpno(int empno) {
        this.empno = empno;
    }

    /**
     * 氏名の取得
     *
     * @return 氏名
     */
    public String getEname() {
        return ename;
    }

    /**
     * 氏名の設定
     *
     * @param ename 氏名
     */
    public void setEname(String ename) {
        this.ename = ename;
    }
}
package com.fc2web.itref.examples.supercsv;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.List;

import org.supercsv.prefs.CsvPreference;

import com.github.mygreen.supercsv.io.CsvAnnotationBeanReader;

public class SuperCsvExamples {

    public static void main(String[] args) {
        File file = new File("C:\\\\Users\\\\marina\\\\Documents\\\\example.csv");
        try {
            BufferedReader br = Files.newBufferedReader(file.toPath(), Charset.forName("Windows-31j"));
            CsvAnnotationBeanReader<EmpCsv> csvReader = new CsvAnnotationBeanReader<EmpCsv>(EmpCsv.class, br, CsvPreference.STANDARD_PREFERENCE);
            // すべてのレコードを一度に読み込む
            List<EmpCsv> list = csvReader.readAll();
            for (EmpCsv empCsv : list) {
                System.out.println(empCsv.getEmpno());
                System.out.println(empCsv.getEname());
            }
            csvReader.close();
            br.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

上記のプログラムの実行結果を示す。

1
Muto Ayami
2
Miyoshi
3
Matsui Airi

アノテーション

Super CSV Annotationのアノテーション(注釈型)を次に示す。

アノテーション 説明
@com.github.mygreen.supercsv.annotation.CsvBean CSVのBeanであることを表現するためのアノテーション
@com.github.mygreen.supercsv.annotation.CsvColumn CSVのカラムであることを表現するためのアノテーション
@com.github.mygreen.supercsv.annotation.constraint.CsvEquals 指定した値と等しいか検証する。
@com.github.mygreen.supercsv.annotation.constraint.CsvRequire 必須チェックを行う。
@com.github.mygreen.supercsv.annotation.constraint.CsvUnique 他のレコードの値と異なるか検証する。
@com.github.mygreen.supercsv.annotation.constraint.CsvUniqueHashCode 他のレコードの値と異なるかハッシュコードにより検証する。

@CsvBean

@com.github.mygreen.supercsv.annotation.CsvBeanは、CSVのBeanであることを表現するためのアノテーションである。

ヘッダ行無しのCSV Beanを定義する。

@CsvBean(header=false)
public class EmpCsv {
    // フィールド定義やgetter/setterの定義
}

@CsvColumn

@com.github.mygreen.supercsv.annotation.CsvColumnは、CSVのカラムであることを表現するためのアノテーションである。

カラム番号(1始まり)を指定してカラムを定義する。

@CsvColumn(number=1)
private int empno;

カラム番号と見出しの値を指定してカラムを定義する。

@CsvColumn(number=2, label="EmployeeName")
private String ename;

例外

Super CSV Annotationがスローする例外を次の表に示す。

例外 説明
com.github.mygreen.supercsv.exception.SuperCsvNoMatchColumnSizeException ヘッダー行やレコードを読み込む際に@CsvColumnで定義したカラム数と異なる場合にスローされる例外
このエントリーをはてなブックマークに追加
スポンサーリンク