SuperCSVのサンプル弐
以前作った郵便番号CSVの読み込みサンプルをベースに改造。
CSVの一列をBeanにマッピングするメゾットを使用して一行単位で読書きします。
今回はCSVの指定列だけを読み込めるように指定してあります。
読み込みたくない列にはNULLを設定することでその列を読み込まなくなります。
材料はこちら
郵便番号CSV
SuperCSV-1.31
commons-lang-2.4←Beanの中身を出力するため。
public class CsvBeanExample { /** * 読み込み用ネームマッピング(NULLは読み込まない列) */ private static final String[] READ_NAME_MAPPING = {"la_code" , "zip_code_old", "zip_code", null, null , null, "prefectural", "city", "town", null, null , null, null, null, null}; /** * 書き込み用ネームマッピング */ private static final String[] WRIT_NAME_MAPPING = {"la_code" , "zip_code_old", "zip_code_old", "zip_code" ,"prefectural" , "city", "town"}; /** * * 実行。 * @throws Exception 例外 */ public void execute() throws Exception { CsvBeanReader cbr = null; CsvBeanWriter cbw = null; try{ final FileReader fr = new FileReader("./csv/13TOKYO.CSV"); final FileWriter fw = new FileWriter("./csv/sample.csv"); cbr = new CsvBeanReader(fr, CsvPreference.NO_COMMENT_PREFERENCE); cbw = new CsvBeanWriter(fw, CsvPreference.NO_COMMENT_PREFERENCE); Address address = null; while ((address = cbr.read( Address.class, READ_NAME_MAPPING)) != null) { System.out.println(ToStringBuilder.reflectionToString( address,ToStringStyle.SIMPLE_STYLE)); cbw.write(address, WRIT_NAME_MAPPING); } } finally { cbr.close(); cbw.close(); } } /** * <HR> * <P> * ■モジュール名 <BR> * <BLOCKQUOTE> * Address.java <BR> * </BLOCKQUOTE> * <P> * ■クラス仕様 <BR> * <BLOCKQUOTE> * Addressクラスは住所を保持するクラスです。<BR> * </BLOCKQUOTE> * <P> * <HR> * <P> */ public static class Address { /** * 全国地方公共団体コード JIS X0401,X0402 */ private String la_code; /** * 旧郵便番号 5桁 */ private String zip_code_old; /** * 郵便番号 7桁 */ private String zip_code; /** * 都道府県名 */ private String prefectural; /** * 市区町村名 */ private String city; /** * 町域名 */ private String town; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getLa_code() { return la_code; } public void setLa_code(String la_code) { this.la_code = la_code; } public String getPrefectural() { return prefectural; } public void setPrefectural(String prefectural) { this.prefectural = prefectural; } public String getTown() { return town; } public void setTown(String town) { this.town = town; } public String getZip_code() { return zip_code; } public void setZip_code(String zip_code) { this.zip_code = zip_code; } public String getZip_code_old() { return zip_code_old; } public void setZip_code_old(String zip_code_old) { this.zip_code_old = zip_code_old; } } }
結果はこんな感じで出力されます。
13101,100 ,100 ,1000000,東京都,千代田区,以下に掲載がない場合 13101,102 ,102 ,1020072,東京都,千代田区,飯田橋 13101,102 ,102 ,1020082,東京都,千代田区,一番町 ...