opencsvで区切り文字を指定して読み込み
こんにちは、かささぎです。絶賛ニート中です。
今回はjavaでopencsvを用いてCSVファイルを読み込む話をしていきます。
CSVファイルとは
カンマ区切りとも呼ばれる、カンマで値を区切ったデータファイルです。
基本的な読み込み
こんな感じです。
try{ FileReader fileReader = new FileReader(new File("hoge.csv") ); CSVReader reader = new CSVReader(fileReader); List<String []> datas = reader.readAll(); }catch(Exception e){ e.printStackTrace(); }
これを実行すると、datasにlistとして一行ずつデータが格納されていきます。
区切り文字等の設定
CSVは基本的にカンマ区切りですが、スペースやタブなど、他の文字で区切りたいこともあると思います。
その際にはCSVReaderの第二引数に区切り文字を設定して...と思ったのですが、
Intellijさんに横棒を付けられました。
実行してみると推奨されなくなったみたいです。
ggると、
http://opencsv.sourceforge.net/apidocs/com/opencsv/CSVReader.html
代わりにCSVReaderBuilderを使えって書いてありました。
これをもとにソースを苦しみながら解読して実装しました。
区切り文字をスペースにする例は以下のようになります。
try{ FileReader fileReader = new FileReader(new File("hoge.csv") ); CSVPerser parser = new CSVParserBuilder().withSeparator(' ').build(); CSVReader reader = new CSVReaderBuilder(fileReader).withCSVPerser(parser).build(); List<String []> datas = reader.readAll(); }catch(Exception e){ e.printStackTrace(); }
解説します。
CSVReaderBuilder().build() と CSVReader() は同じものを表すようです。
withCSVParser() でparserの設定を加えることができるようです。
parserもreader同様、Builder().build()にする必要があります。
withSeparator(char) でセパレータ(区切り文字)を設定できます。
この前後に.でつなぐことで、他にもいろいろな設定ができるみたいです。
例えば、withQuoteChar(char)で引用符の文字を設定したり、
withIgnoreQuotations(true)で引用符を無視する設定にできたりします。
他にもReaderで先頭n行をとばす設定ができたりと、いろいろ用意されているので、
是非調べてみてください。
それでは。