こんにちは!しーま(@s59shima)です。
いつもブログをご覧いただきありがとうございます。
今回は、こんな悩みや疑問を持った人に向けて記事を書きました。

CSVファイルを読み書きするプログラムを自作したけど、上手くいかないなぁ。。。何か良いライブラリとかあるかなー!?
「Super CSV」というライブラリを使ってCSVファイルを操作したい方にはおすすめの記事です。
CSVファイルとは
Comma Separated Valueの略で、カンマ(,)で区切られたテキストデータのことです。
CSVファイルの拡張子は(.csv)となります。以下、サンプルになります。
id,name,age,from
1,user1,20,okinawa
2,user2,25,tokyo
3,user3,30,osaka
1行目に各列の項目名称、2行目以降にデータを記述されていることが分かりますね。
Super CSVで効率的に読み書きする
ライブラリを使用しなくても、CSVファイルの読み書きは出来ます。ですが、CSVファイルをあれこれ考慮したプログラムを自作するとボリュームがとても増えます。
そんなCSVファイルの読み書きを柔軟 かつ 簡単にプログラミングできるライブラリ「Super CSV」を使って読み書きを行います。
今回はバージョン2.4を公式サイトからダウンロードして使用します。

Javaプロジェクトに外部ライブラリを追加
実際に使用するには、外部ライブラリをダウンロードし、対象のJavaプロジェクトに適用させる必要があります。
その手順について解説します。
Net Beans8.2を使用している場合
対象のJavaプロジェクト(添付画像ではJavaApplication)のライブラリにSuper CSVを追加します。
1.対象のJavaプロジェクト(添付画像ではJavaApplication)を選択し、右クリックします。
2.コンテキストメニューより「プロパティ」をクリックします。

3.プロジェクト・プロパティより「ライブラリ」カテゴリを選択
4.「コンパイル」タブより「JAR/フォルダの追加」をクリックします。

5.Super CSVをダウンロードしたフォルダより「super-csv-2.4.0.jar」を選択します。
6.選択したjarファイルが「ファイル名」に表示されたら、「開く」をクリックします。

7.プロジェクト・プロパティに「Super CSV」が確認できたら「OK」をクリックします。

8.ライブラリに「super-csv-2.4.0.jar」が表示されていれば完了です!

CSVファイルを読み書きするために使用する主なクラスはこの4つです。
- Paths(Java7から誕生)
- Files(Java7から誕生)
- BufferedReade
- BufferedWriter
CSVファイルの読み込み
上記のクラスに加え「CsvBeanReader」クラスを使用してCSVファイルを読み込みます。
読み込みを行うCSVファイルを用意します。
格納場所 | Dドライブ ⇒ ws_javaフォルダ |
ファイル名 | readfile.csv |
サンプルコードと実行結果
サンプルのソースコードはこちらです。
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.supercsv.io.CsvBeanReader;
import org.supercsv.io.ICsvBeanReader;
import org.supercsv.prefs.CsvPreference;
public class Sample {
public static void main(String[] args) {
Path path = Paths.get( "D:/ws_java/readfile.csv" );
try ( ICsvBeanReader beanReader = new CsvBeanReader(Files.newBufferedReader(path), CsvPreference.STANDARD_PREFERENCE) ) {
// ヘッダの取得・表示
String[] header = beanReader.getHeader(true);
System.out.println( header[0] + " " + header[1] + " " + header[2] + " " + header[3] );
// データの取得・表示
Profile profile;
while ( ( profile = beanReader.read(Profile.class, header) ) != null ) {
System.out.println( profile.getId() + " " + profile.getName() + " " + profile.getAge() + " " + profile.getFrom() );
}
} catch ( IOException e ) {
System.out.println( e );
}
}
}
実行結果はこちらになります。
id name age from
1 user1 20 okinawa
2 user2 25 tokyo
3 user3 30 osaka
CSVファイルの書き込み
上記のクラスに加え「CsvBeanWriter」クラスを使用してCSVファイルを読み込みます。
書き込みを行うテキストファイルは以下のようにします。
格納場所 | Dドライブ ⇒ ws_javaフォルダ |
ファイル名 | writefile.csv |
サンプルコードと実行結果
サンプルのソースコードはこちらです。
package javaapplication;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import org.supercsv.io.CsvBeanWriter;
import org.supercsv.io.ICsvBeanWriter;
import org.supercsv.prefs.CsvPreference;
public class Sample2 {
public static void main(String[] args) {
List<Profile> profileList = getProfileList();
String[] header = new String[]{ "id", "name", "age", "from" };
Path path = Paths.get( "D:/ws_java/writefile.csv" );
try ( ICsvBeanWriter beanWriter = new CsvBeanWriter( Files.newBufferedWriter(path), CsvPreference.STANDARD_PREFERENCE ) ) {
// ヘッダ行の書き込み
beanWriter.writeHeader( header );
for ( Profile profile : profileList ) {
// データ行の書き込み
beanWriter.write( profile, header );
}
} catch ( IOException e ) {
System.out.println( e );
}
}
// サンプルデータの作成
static List<Profile>getProfileList() {
List<Profile> profileList = new ArrayList<>();
Profile profile1 = new Profile();
profile1.setId( "1" );
profile1.setName( "user1" );
profile1.setAge( "20" );
profile1.setFrom( "okinawa" );
profileList.add( profile1 );
Profile profile2 = new Profile();
profile2.setId( "2" );
profile2.setName( "user2" );
profile2.setAge( "25" );
profile2.setFrom( "tokyo" );
profileList.add( profile2 );
Profile profile3 = new Profile();
profile3.setId( "3" );
profile3.setName( "user3" );
profile3.setAge( "30" );
profile3.setFrom( "osaka" );
profileList.add( profile3 );
return profileList;
}
}
実行結果はこちらになります。
id,name,age,from
1,user1,20,okinawa
2,user2,25,tokyo
3,user3,30,osaka
本記事のまとめ
今回は、CSVファイルの操作(読み込み・書き込み)について解説しました。
最後まで読んでいただきありがとうございます(*^-^*)
本記事の内容をまとめると以下の通りです。
- Super CSV はCSVデータを扱える外部ライブラリ
- 読み込む場合、CsvBeanReaderクラスを使用する。
- 書き込む場合、CsvBeanWriterクラスを使用する。
各ファイルの操作方法を紹介
本ブログで紹介する各ファイル操作(読み込み・書き込み)は下記5つ。
- CSVファイルの読み書き
本記事はココ!
おすすめ記事
「Javaプログラミングをもう一度本格的に勉強したいっ!」という方へ
逆に、「Javaプログラミング以外を本格的に勉強したいっ!」という方へ