オーダーメイドコース
icon
icon

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

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

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

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

 

そもそもJavaについてよく分からないという方は、Javaとは何なのか解説した記事を読むとさらに理解が深まります。
 

なお本記事は、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] 未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

読み込んだ行をカンマで分割する際は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やServletの技術を使ってWebアプリケーション開発を習得できるオンラインブートキャンプJava講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。