JavaでCSVファイルを読み込む方法を現役エンジニアが解説【初心者向け】

初心者向けにJavaでCSVファイルを読み込む方法について解説しています。CSVファイルはComma Separated Valueの略で、カンマで区切られたデータの入ったファイルです。JavaでCSVを利用する方法をサンプルを見ながら学習しましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

この記事では、JavaでCSVファイルを読み込む方法について解説します。実際にプログラムを書いて説明しているので、ぜひ理解しておきましょう。

 

なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。

 

田島悠介

今回は、Javaに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

CSVファイルを読み込む方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

CSVファイルとは

データをカンマ(“,”)で区切った形式のファイルのことです。

データの授受でよく使われる形式で、エクセルソフトでも保存時にcsv形式を指定することで作成することができます。

 

内容は下記のように記述し、拡張子は.csvで保存します。

no,name,age,gender,bloodtype
1,robby,45,M,A
2,katty,21,F,B
3,leo,23,M,AB
4,alice,18,F,O
5,robby,30,M,B

先頭行の以下は、エクセルの表で列名にあたります。

no,name,age,gender,bloodtype

それ以降の行は1行で1データを表しています。カンマで区切った何番目にあるかで、そのデータが何であるかを示しています。

例えば

1,robby,45,M,A

をカンマで区切った2番目はrobbyです。

列名の行

no,name,age,gender,bloodtype

も同様にカンマで区切った2番目を参照するとnameとなっています。

1データめのnameはrobbyであるということになります。

 

CVSファイルを読み込む方法

CSVファイルをJavaで読み込む際は、通常のテキストファイルと同じように読み込んだ後

1行の情報をカンマで分割することで各項目のデータを取得します。

 

[PR] Javaで挫折しない学習方法を動画で公開中

実際に書いてみよう

読み込んだ行をカンマで分割する際はString.split( )メソッドを使います。引数で指定した文字で、行の文字列を分割し、配列として戻します。

split(“,”)と指定することで、カンマで区切った情報を配列で得ることができます。

public static void main(String[] args) {

  //ファイル読み込みで使用する3つのクラス
  FileInputStream fi = null;
  InputStreamReader is = null;
  BufferedReader br = null;

  try {

    //読み込みファイルのインスタンス生成
    //ファイル名を指定する
    fi = new FileInputStream("namelist.csv");
    is = new InputStreamReader(fi);
    br = new BufferedReader(is);

    //読み込み行
    String line;

    //読み込み行数の管理
    int i = 0;

    //列名を管理する為の配列
    String[] arr = null;

    //1行ずつ読み込みを行う
    while ((line = br.readLine()) != null) {

      //先頭行は列名
      if (i == 0) {

        //カンマで分割した内容を配列に格納する
        // arr = { "no","name","age","gender","bloodtype" };
        arr = line.split(",");

      } else {

        //データ内容をコンソールに表示する
        System.out.println("-------------------------------");

        //データ件数を表示
        System.out.println("データ" + i + "件目");

        //カンマで分割した内容を配列に格納する
        String[] data = line.split(",");

        //配列の中身を順位表示する。列数(=列名を格納した配列の要素数)分繰り返す
        int colno = 0;
        for (String column : arr) {
          System.out.println(column + ":" + data[colno]);
          colno++;

        }

      }

      //行数のインクリメント
      i++;

    }

  } catch (Exception e) {
    e.printStackTrace();
  } finally {
    try {
      br.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

読み込み用のcsvファイルはテキストエディタで作成し、プロジェクトのルートフォルダに配置します。

内容は下記です。ファイル名はnamelist.csvです。
no,name,age,gender,bloodtype
1,robby,45,M,A
2,katty,21,F,B
3,leo,23,M,AB
4,alice,18,F,O
5,robby,30,M,B

 

実行結果

-------------------------------
データ1件目
no:1
name:robby
age:45
gender:M
bloodtype:A
-------------------------------
データ2件目
no:2
name:katty
age:21
gender:F
bloodtype:B
-------------------------------
データ3件目
no:3
name:leo
age:23
gender:M
bloodtype:AB
-------------------------------
データ4件目
no:4
name:alice
age:18
gender:F
bloodtype:O
-------------------------------
データ5件目
no:5
name:robby
age:30
gender:M
bloodtype:B

各行を項目ごとに表示することができました。

 

監修してくれたメンター

長屋雅美

独立系SIerで7年勤務後、現在はフリーのエンジニアとして自宅をオフィスとして活動しています。
JavaやC♯、shellscriptを用いた開発を主に担当し、TechAcademyではJavaコースを担当しています。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。

JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。