CSVファイルからJava Beanを作りたく、ここを参考にしてみたので、めもめもφ(-ω-)
pom.xmlに依存するライブラリを記述
Apache Common-IOは必要ないけど、CSVファイルかどうかのチェックに利用している。
■pom.xml
<!-- opencsv --> <dependency> <groupId>net.sf.opencsv</groupId> <artifactId>opencsv</artifactId> <version>2.3</version> </dependency>
パースしたいデータを用意
パースしたいcsvファイルは以下。
■src/test/resources/test.csv
最初のカラムからそれぞれユーザ名、プロジェクト名、マネージャフラグとする。
# userName, projectName, isManager "user01", "proj01", true "user02", "proj01", false "user03", "proj01", false
Beanにデータをマッピング
そして、上記のデータを今回は以下のBeanにマッピングする。
■Bean.java
public class Bean { private String userName; private String projectName; private boolean isManager; (getter, setterは割愛) }
それでは実装のほう。
CSVReaderはオーバーロードされている。 使うのは以下のメソッド
public CSVReader(Reader reader,
char separator,
char quotechar,
int line)
Constructs CSVReader with supplied separator and quote char.
Parameters:
reader - the reader to an underlying CSV source.
separator - the delimiter to use for separating entries (区切り文字を指定)
quotechar - the character to use for quoted elements (文字列のクォーテーションを指定)
line - the line number to skip for start reading (ファイルの最初から何行目までスキップするか指定)
■Csvparser.java
/** * CSVファイルからデータを読み込むメソッド . * @param fileName 該当ファイルパス * @return パースしたJava Beanのリスト */ public List<Bean> readFromCsvFile(String fileName) { InputStreamReader isr = null; List<Bean> list = null; try { try { isr = new InputStreamReader(new FileInputStream(fileName), "UTF-8"); CSVReader reader = new CSVReader(isr, ',', '"', 1); ColumnPositionMappingStrategy start = new ColumnPositionMappingStrategy(); start.setType(Bean.class); String[] columns = new String[]{"userName", "projectName", "isManager"}; start.setColumnMapping(columns); CsvToBean csv = new CsvToBean(); list = csv.parse(start, reader); } catch (FileNotFoundException ex) { ex.printStackTrace(); } } catch (UnsupportedEncodingException ex) { ex.printStackTrace(); } finally { try { isr.close(); } catch (IOException ex) { ex.printStackTrace(); } } return list; } /** * ファイルがExcelファイルかCSVファイルであるか確認するメソッド . * @param inputFile 対象ファイル * @return Excelファイルか否か */ public boolean isFileValid (String inputFile){ boolean isValid = false; if (inputFile != null) { if (inputFile.endsWith("xls") || inputFile.endsWith("xlsx") || inputFile.endsWith("csv")) { isValid = true; } } return isValid; }
動作を確認
最後にこのクラスを利用してCSVからJava Beanが取得できることを確認する。
■EjbTest.java
private Csvparser sut = null; @Before public void setUp() { sut = new Csvparser(); } @After public void tearDown() { sut = null; } @Test public void testReadFromCsvFile() { List<Bean> list = sut.readFromCsvFile("src/test/resources/test.csv"); assertNotNull(list); assertThat(list.get(0).getUserName(), is("user01")); assertThat(list.get(0).getProjectName(), is("proj01")); assertThat(list.get(0).isIsManager(), is(true)); assertThat(list.get(1).getUserName(), is("user02")); assertThat(list.get(1).getProjectName(), is("proj01")); assertThat(list.get(1).isIsManager(), is(false)); assertThat(list.get(2).getUserName(), is("user03")); assertThat(list.get(2).getProjectName(), is("proj01")); assertThat(list.get(2).isIsManager(), is(false)); }