以下の希望で探してきて試してみる。
Needs と Wants ごちゃまぜだけど。
- CSVファイルをサクッと読み込みたい
- CSVファイルの出力はしない
- 読み込んだ内容は JavaBeans にマッピングされて使用できる
- Bean Validation 機能はあればよい
- ドキュメント サンプルコードが豊富にある
- 更新状況はあまり気にしない
前提条件
- Windows 7 Professional
- Java version 1.8.0_25
- Apache Maven 3.2.5
- NetBeans IDE 8.0.2
- CSV Shift-JIS CRLF ヘッダ列有
pom.xml
以下の依存を注入。
<dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.14</version> </dependency> <dependency> <groupId>com.univocity</groupId> <artifactId>univocity-parsers</artifactId> <version>2.3.1</version> </dependency> </dependencies>
person.csv
なんちゃって個人情報 にてデータを生成。
プロジェクト配下の src\main\resources に配置。
名前,ふりがな,アドレス,性別,誕生日 脇田 祐基,わきた ゆうき,wakita_yuuki@example.com,男,2017/1/28 今川 広司,いまがわ こうじ,imagawa_kouji@example.com,男,2017/1/9 矢沢 丈史,やざわ たけし,yazawa_takeshi@example.com,男,2017/1/17 ...
Persion.java
Java Bean クラスを作成。
package comparison.csvproject.com.univocity; import com.univocity.parsers.annotations.Parsed; import lombok.Data; @Data public class Persion { @Parsed(field = "名前") private String name; @Parsed(field = "ふりがな") private String furigana; @Parsed(field = "アドレス") private String emailaddress; @Parsed(field = "性別") private String sex; @Parsed(field = "誕生日") private String birthday; }
ExecuteMe.java
実行クラスを作成。
package comparison.csvproject; import com.univocity.parsers.common.processor.BeanListProcessor; import com.univocity.parsers.csv.CsvParser; import com.univocity.parsers.csv.CsvParserSettings; import java.io.File; import java.nio.charset.Charset; import java.util.List; public class ExecuteMe { public static void main(String[] args) { ExecuteMe me = new ExecuteMe(); me.comunivocity(); } public void comunivocity() { BeanListProcessor<comparison.csvproject.com.univocity.Persion> processor = new BeanListProcessor<>(comparison.csvproject.com.univocity.Persion.class); CsvParserSettings parserSettings = new CsvParserSettings(); parserSettings.setProcessor(processor); parserSettings.setHeaderExtractionEnabled(true); File file = new File(ClassLoader.getSystemResource("person.csv").getFile()); CsvParser parser = new CsvParser(parserSettings); parser.parse(file, Charset.forName("Shift_JIS")); List<comparison.csvproject.com.univocity.Persion> beans = processor.getBeans(); for (comparison.csvproject.com.univocity.Persion bean : beans) { System.out.println(bean); } } }
出力
できた。
素晴らしい。
Persion(name=脇田 祐基, furigana=わきた ゆうき, emailaddress=wakita_yuuki@example.com, sex=男, birthday=2017/1/28) Persion(name=今川 広司, furigana=いまがわ こうじ, emailaddress=imagawa_kouji@example.com, sex=男, birthday=2017/1/9) Persion(name=矢沢 丈史, furigana=やざわ たけし, emailaddress=yazawa_takeshi@example.com, sex=男, birthday=2017/1/17) ...