Javaと情熱のあいだ

カステラとドーナツと珈琲

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,東京都,千代田区,一番町
...