【Java入門】CSVファイルの操作(読み込み・書き込み)

スポンサーリンク

こんにちは!しーま(@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を公式サイトからダウンロードして使用します。

supercsvのjarファイル

Javaプロジェクトに外部ライブラリを追加

実際に使用するには、外部ライブラリをダウンロードし、対象のJavaプロジェクトに適用させる必要があります。

その手順について解説します。

Net Beans8.2を使用している場合

対象のJavaプロジェクト(添付画像ではJavaApplication)のライブラリにSuper CSVを追加します。

1.対象のJavaプロジェクト(添付画像ではJavaApplication)を選択し、右クリックします。

2.コンテキストメニューより「プロパティ」をクリックします。

SuperCSVをプロジェクトに適応する

3.プロジェクト・プロパティより「ライブラリ」カテゴリを選択

4.「コンパイル」タブより「JAR/フォルダの追加」をクリックします。

SuperCSVをプロジェクトに適応する

5.Super CSVをダウンロードしたフォルダより「super-csv-2.4.0.jar」を選択します。

6.選択したjarファイルが「ファイル名」に表示されたら、「開く」をクリックします。

SuperCSVをプロジェクトに適応する

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

SuperCSVをプロジェクトに適応する

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

SuperCSVをプロジェクトに適応する

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つ。

おすすめ記事

Javaプログラミングをもう一度本格的に勉強したいっ!」という方へ

逆に、「Javaプログラミング以外を本格的に勉強したいっ!」という方へ

関連記事

Javaスキルで悩んでいる方必見!本気で学習できる環境を探してみよう!
詳細はこちら
Javaスキルで悩んでいる方必見!本気で学習できる環境を探してみよう!
詳細はこちら
タイトルとURLをコピーしました