Opencsvについては、リンク先を参照。
ここではアノテーションを使わずに、各列を各変数にマッピングする方法を紹介する。
・CSVを読み込む
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | try (InputStreamReader is = new InputStreamReader(multipartFile.getInputStream(), Constants.ENCODING);
CSVReader reader = new CSVReaderBuilder(is).withSkipLines( 1 ).build()) {
ColumnPositionMappingStrategy strat = new ColumnPositionMappingStrategy<>();
strat.setType(User. class );
strat.setColumnMapping( "username" , "password" , "firstName" , "lastName" , "email" );
CsvToBean<User> csv = new CsvToBean<>();
csv.setCsvReader(reader);
csv.setMappingStrategy(strat);
return csv.parse();
} catch (IOException e) {
} catch (IllegalStateException e) {
}
|
InputStreamReaderについては、どこからファイルを取得するかによって変更する。
2 | CSVReader reader = new CSVReaderBuilder(is).withSkipLines( 1 ).build();
|
で、CSVReaderを作成する。1行目はヘッダー行のため、withSkipLines(1)で2行目から読み込むようにしている。
ColumnPositionMappingStrategyで、CSVファイルの各列をどのクラスのどの変数にマッピングするか指定出来る。
strat.setType(User.class)で、Userクラスにマッピングすることを指定している。
strat.setColumnMapping(“username”, “password”, “firstName”, “lastName”, “email”)で、1列目をUserクラスのusername変数へ、2列目をpasswordへのように指定していることになる。
CsvToBeanで、List<String[]>をList<User>に変換する。
・CSVに書き出す
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | try (OutputStreamWriter os = new OutputStreamWriter(response.getOutputStream(), Constants.ENCODING);
CSVWriter writer = new CSVWriter(os)) {
writer.writeNext( new String[] { "ユーザ名" , "パスワード" , "名字" , "名前" , "eメール" });
ColumnPositionMappingStrategy<User> strat = new ColumnPositionMappingStrategy<>();
strat.setType(User. class );
strat.setColumnMapping( "username" , "password" , "firstName" , "lastName" , "email" );
StatefulBeanToCsv<User> beanToCsv = new StatefulBeanToCsvBuilder<User>(writer)
.withMappingStrategy(strat)
.build();
beanToCsv.write(userList);
} catch (IOException e) {
} catch (CsvException e) {
}
|
CSVファイルへの書き出しは上記の通り。