String[]
これは、CSV の行である を のプロパティにマップする方法を定義していますJavaBean
。
class
あなたがそのようなものを持っていると仮定しましょう:
public class JavaBeanExample {
private Integer id;
private String name;
private Integer orderNumber;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(Integer orderNumber) {
this.orderNumber = orderNumber;
}
}
このクラスに関する重要なポイントは次のとおりです。
- public noargs コンストラクターを使用します。これは Java のデフォルトであるため、コンストラクターを指定する必要はありません。
- すべてのプロパティはプライベートです。
- すべてのプロパティにはゲッター、つまり
getXxxx
値を返すメソッドが呼び出されます。
- すべてのプロパティにはセッター、つまり
setXxxx
値を設定するために呼び出されるメソッドがあります。
今; 最初のメソッド はsetType
、Bean のクラスを取得します。これを使用して、リフレクションを介してインスタンスを作成します。この場合、次のように呼び出します。
strat.setType(JavaBeanExample.class);
次に、次の形式の CSV があるとします。
名前、注文番号、注文 ID
Joe Bloggs、77777、00001
John Smith、77778、00002
したがって、最初の列をname
プロパティに、2 番目をorderNumber
プロパティに、3 番目をにマップする必要がありid
ます。Bean 内のプロパティ名を使用して、使用するセッターを OpenCSV に伝えます。次に、OpenCSV は a を使用しPropertyDescriptor
て、対応する名前のセッターを介してプロパティを設定します。
この場合、次のように呼び出します。
String[] columns = new String[] {"name", "orderNumber", "id"};
strat.setColumnMapping(columns);
これですべての設定が完了し、OpenCSV を呼び出して開始できます。
List list = csv.parse(strat, yourReader);
これにより、ファイルの各行に 1 つずつ、 List
ofが返されます。JavaBeanExample
しかし、これはやや不愉快ですList
。これは、例がやや古くなっているためです。これはGenericsを利用した例で、この例は Java 7 で書かれています。
final ColumnPositionMappingStrategy<JavaBeanExample> strategy = new ColumnPositionMappingStrategy<>();
strategy.setType(JavaBeanExample.class);
strategy.setColumnMapping(new String[]{"name", "orderNumber", "id"});
final CsvToBean<JavaBeanExample> csvToBean = new CsvToBean<>();
final List<JavaBeanExample> beanExamples;
try (final Reader reader = new FileReader("myFile.csv")) {
beanExamples = csvToBean.parse(strategy, reader);
} catch (IOException ex) {
throw new RuntimeException(ex);
}
ここでの違いはColumnPositionMappingStrategy
、山かっこを使用してジェネリック型を伝えることです。CsvToBean
また、そのジェネリック型も伝えます。これは、parse を呼び出すと aList<JavaBeanExample>
が返されることを意味します。つまり、List
そのジェネリック型を知っています。の個々の要素をキャストする必要がなくなりましたList
。