5分でできる!簡単なcsvデータの加工(read/write)法。(Java編)


 

仕事やプライベートで?受け取ったcsvのデータを、自分の思うようにちょっと加工したいときってありませんか?

項目の順番を入れ替えたり、文字列に加工したりして、自分の使いやすい形に整形したいというシーンは結構あると思います。

Script系の言語を使ったり、SedやAwkを使う!という人もいるでしょうね。私はjavaが使い慣れているので、今回はJavaを使ってみたいと思います。

いくつか便利なライブラリがあるようですが、私は、opencsvが使いやすいと思いました。

opencsvでは、csvファイルの読み込みの方法をいくつか指定することができます。

どの方法を利用して読み込みを行うかはMappingStrategyクラスを切り替えることで指定できます。

HeaderColumnNameTranslateMappingStrategy

HeaderColumnNameMappingStrategy

などはヘッダ項目をもつcsvファイルを扱うのに便利なクラスのようですね。私が今回利用したのはColumnPositionMappingStrategyクラスです。

csvファイルを簡単に加工するというのが目的ですので、読み込み/書き込みの記述が比較的シンプルな方法を選択しました。

 

準備作業

 

参照するjar(ライブラリ)

コンパイルに必要なライブラリは以下の通りです。OpenCVはもちろん必要ですが、「commons-beanutils」と「org.apache.commons」も必要なので、詳細は、ここのdependenciesを確認しましょう。

※2016/09/01に再検証した時点では、以下のjarが必要でした。

  • opencsv-3.8.jar
  • commons-beanutils-1.9.2.jar
  • commons-lang3-3.4.jar

 

読み込みに使うcsvファイル

実際に読み書きに使用するcsvファイルを適当なディレクトリに用意します。サンプルとして、「SampleIn.csv」というファイルをUTF-8の文字コードで作成しました。

上記のような内容のcsvで良いと思います。1行目がヘッダで、このヘッダ名をキーに下記の「String[]{“key”, “name”, “pref”, “job”}」で対応付けて読み取ります。

 

csvを扱うクラスの作成

まず、読み込み対象のcsvファイルの項目に対応する単純なJavaBeansクラスを定義します。項目さえ定義すれば、SetterとGetterはEclipseなどのIDEが自動で吐いてくれますよね。

コンストラクタで空白をセットしておいてあげると、空行とかを読み込んだときにエラーで落ちることを防いでくれます。

SampleCsvBeanクラス

次に、作成したJavaBeansクラスを読み書きする、Mainクラスを作成します。

MainCSVUtil

一旦読み込むと、定義したJavaBeans型のリストとなるので、その後の加工は自由自在です。加工した結果を、csvに吐き出すコードは、上記の「writeSampleCSV」です。

一つ作っておくと、いろいろなcsvを加工するのも楽ですよ。

 

こんな記事も読まれています


コメントを残す

サブコンテンツ

このページの先頭へ