ヘルバ様の日常

テストを兼ねて色々試してみるブログです

JavaでCSVの読み込み(その2)

welcome-to-the-world.hatenablog.jp

 

 

まずは「4.1行は任意のBeanクラスで定義される」を実現するためにBeanクラスの項目に属性が付けれるようにしようと思います。

 

 

java.lang.annotation」を使用してBeanクラスの各項目に属性として項目順序、項目名を付けれるようにします。

 

 

項目順序はCSVファイルの列の順序、項目名はヘッダーを想定しています。

 

import java.lang.annotation.*;

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface CsvColumn {
	/** 項目順序 */
	int number();
	/** 項目名(ヘッダー用) */
	String label();
}

 

このannotationを何に適用するかを@Targetで指定します。

 

 

今回はBeanクラスの項目に適用するのでElementType.FIELDを指定します。

 

 

@Retentionでこのannotationがどの段階まで保持されるかを指定します。

 

 

今回はプログラム実行時まで保持させたいのでRetentionPolicy.RUNTIMEを指定します。

 

このannotationを利用してBeanクラスの項目に属性を付与します。

 

  

サンプル
public class TestBean {
	@CsvColumn(number=0, label="col0")
	String column0 = StringUtils.EMPTY;

	@CsvColumn(number=1, label="col1")
	String column1 = StringUtils.EMPTY;

	@CsvColumn(number=3, label="col3")
	String column3 = StringUtils.EMPTY;

	@CsvColumn(number=2, label="col2")
	String column2 = StringUtils.EMPTY;
}

 

numberは列をソートする際に使用します。

 

列0、列1、列2、列3
col0、col1、col2、col3

 

のようにCSVの列の順序に合わせるためnumberを定義します。

 

 

次回は読み込み部分の部品から実装したいと思います。

 

ヘルバ様独自のコーディングで手法、動作は保証はできません^^;
その点はご了承ください。