7. 部分的なカラムの読み書き

Beanに定義しているカラムのみ処理する方法を説明します。

7.1. 部分的なカラムの読み込み

CSVファイルで一部のカラムを読み込みたい場合は、フィールドの定義を単純に行わなければマッピングできます。

  • 最後のカラム番号が実際のCSVファイルのカラム番号よりも小さい場合は、@CsvPartial(columnSize=<カラムサイズ>) [ JavaDoc ] で、実際のカラムサイズを指定します。

  • @CsvBean(validateHeader=false) に設定し、ヘッダー行の検証をスキップするようにしてください。

    • 値を true にして、ヘッダー行の検証を行うと、定義していない見出しがあり、値が一致しないためエラーとなります。

 1import com.github.mygreen.supercsv.annotation.CsvBean;
 2import com.github.mygreen.supercsv.annotation.CsvColumn;
 3import com.github.mygreen.supercsv.annotation.CsvPartial;
 4
 5
 6@CsvBean(header=true, validateHeader=false) // ヘッダー行がある場合は、検証をスキップします。
 7@CsvPartial(columnSize=5)   // 実際のCSVファイルのカラムサイズを指定します。
 8public class SampleCsv {
 9
10    @CsvColumn(number=1)
11    private int id;
12
13    @CsvColumn(number=2, label="氏名")
14    private String name;
15
16    // カラム番号3は読み込まない場合は、定義を行いません。
17
18    @CsvColumn(number=4, label="メールアドレス")
19    private String email;
20
21    // カラム番号5を読み込まない場合は、定義を行いません。
22}

@CsvBean(validateHeader=true) にして、ヘッダー行の検証を行いたい場合は、定義していないカラムの見出しの定義が必要となるため、 @CsvBean(headers={}) でカラムの見出しの定義を行います。

 1import com.github.mygreen.supercsv.annotation.CsvBean;
 2import com.github.mygreen.supercsv.annotation.CsvColumn;
 3import com.github.mygreen.supercsv.annotation.CsvPartial;
 4
 5
 6@CsvBean(header=true, validateHeader=true) // ヘッダー行の検証を行う
 7@CsvPartial(columnSize=5, headers={          // 定義されていないカラムの見出しを定義します。
 8    @CsvPartial.Header(number=3, label="電話番号"),
 9    @CsvPartial.Header(number=5, label="生年月日")
10})
11public class SampleCsv {
12
13    @CsvColumn(number=1)
14    private int id;
15
16    @CsvColumn(number=2, label="氏名")
17    private String name;
18
19    // カラム番号3を読み込まない場合は、定義を行いません。
20
21    @CsvColumn(number=4, label="メールアドレス")
22    private String email;
23
24    // カラム番号5を読み込まない場合は、定義を行いません。
25
26}

7.2. 部分的なカラムの書き込み

部分的なカラムの書き込みも、読み込み時と同様に行います。 定義していないカラムの値は、空として出力されます。

  • 最後のカラム番号が実際のCSVファイルのカラム番号よりも小さい場合は、@CsvPartial(columnSize=<カラムサイズ>) [ JavaDoc ]で、実際のカラムサイズを指定します。

  • ヘッダー行を書き込む場合、定義されていないカラムの見出しは、 column<カラム番号> の形式となります。

    • 定義していないカラムの見出しの値を指定したい場合は、@CsvBean(headers={}) で設定します。

 1import com.github.mygreen.supercsv.annotation.CsvBean;
 2import com.github.mygreen.supercsv.annotation.CsvColumn;
 3import com.github.mygreen.supercsv.annotation.CsvPartial;
 4
 5
 6@CsvBean(header=true)
 7@CsvPartial(columnSize=5, headers={   // 定義されていないカラムの見出しを定義します。
 8    @CsvPartial.Header(number=3, label="電話番号"),
 9    @CsvPartial.Header(number=5, label="生年月日")
10})
11public class SampleCsv {
12
13    @CsvColumn(number=1)
14    private int id;
15
16    @CsvColumn(number=2, label="氏名")
17    private String name;
18
19    // カラム番号3を書き込みまない場合は、定義を行いません。
20
21    @CsvColumn(number=4, label="メールアドレス")
22    private String email;
23
24    // カラム番号5を書き込みまない場合は、定義を行いません。
25
26}