Javaコラム Javaエンジニアのためのお役立ちコラム

JavaでのCSVファイル読み込み方法とは?

2020年06月30日
SE
CSVファイル読み込み方法ってどんな方法なのですか?
PM
カンマで区切られたファイルをJavaプログラムを使って読み込む方法です。

CSVファイルとは?

エクセルのデータを他のアプリケーションで利用する場合には、CSV形式で一旦データを保存してから読み込むことが多いのではないでしょうか。
CSVとはcomma-separated valuesの略で、カンマで区切られたデータ形式です。CSVファイルはテキストファイルのため扱いやすく、アプリケーションに依存しないデータ形式として、よく使われます。
CSVファイルは、複数のレコードから成り立ちます。レコード内のフィールドはカンマで区切られ、レコード間は改行で区切られます。1行が1レコードなので、エクセルなどの表と親和性の高い形式です。

CSVファイルのデータ例

CSVのデータ例を示します。下に示す例は、科目毎の点数を記録する表をCSV形式に変換したものです。
1行目は表のヘッダで、各列の属性を表しています。2行目以降は、各人のデータを表しています。行内のデータの区切りがカンマ「,」となっているのがわかります。

CSVを1レコードずつ読み込む方法

以下では、CSVファイルのデータをJavaプログラムで処理するために、データを読み込む方法を説明していきます。
最初に、CSVファイルを読み込み、画面に出力するJavaプログラムについて説明します。

行毎に読み込みカンマで分割

CSVデータは1行が1レコードなので、行毎の読み込みが適しています。読み込みには、JavaのBufferdReaderクラスのテキスト行を読み込むメソッドreadLineを利用します。
readLineで読み込んだ1行分の文字列(line)を分割するには、splitメソッドを利用します。引数にカンマを指定することで、lineをカンマで分割した結果がString配列の形式で返却されます。

行読み込みのコード例

CSVデータを1行ずつ読み込むJavaプログラムの例を示します。

出力結果

1行読み込んだら、1行分のデータを出力します。このコード例では、データ間にスペースを挿入しています。CSVファイルの例で示したデータを入力ファイルに設定し実行すると、次のように出力されました。

CSVを2次元配列に読み込む方法

上のプログラムでは1レコードずつ処理を行いましたが、データ全体を処理したい場合には、読み込みデータの蓄積が必要です。ここでは、2次元配列にデータを格納するJavaプログラムの例を示します。

2次元配列にデータを格納する

2次元配列の宣言では、データの行数を決める必要があります。しかし、正確な行数はデータを読み込まないとわからないことも多いでしょう。そこで、想定行数の最大値MAX_DATA_NUMSを、配列の行数に設定します。
1行読み込んでString配列に格納するのは前のプログラムと同じですが、今回は、data[index]のように行をインデックスとする2次元配列に格納することにします。
読み込みデータの処理例として、画面への出力処理を追加します。2次元配列を2重ループで辿りますが、配列の行数は最大値で確保しているため、実際のデータ数に合わせて処理を終了する必要があります。そこで、data[i]がnullになったらループを中断します。

2次元配列のコード例

2次元配列にCSVファイルデータを読み込むJavaプログラムのコード例を示します。

CSVをArrayListに読み込む方法

上の2次元配列のコード例では、行数の最大値を定数で指定しましたが、最大値が不明な場合には、JavaのArrayListを使う方法があります。
ここでは、要素がString配列型のArrayListを使い、CSVファイルを読み込むJavaプログラムの例を示します。splitで返却されるString配列を、addメソッドでリストに追加していきます。

SE
読み込み方法にも種類があるのですね。
PM
使いやすい読み込み方法を習得し、CSVファイルを作成していきましょう。

JavaのCSVファイル読み込み方法を理解しよう

カンマ区切りのデータ形式CSVファイルを、Javaプログラムで読み込む方法を紹介しました。1行毎に読み込む方法、2次元配列に格納する方法、ArrayListに格納する方法の3つの場合について、Javaプログラムの例を用いて説明しました。
実際にエクセルなどの表形式データを用いて、CSVファイルを作成し読み込みながら、どの方法が役に立つか考えてみてはいかがでしょうか。


Javaでのキャリアアップをお考えの方は、現在募集中の求人情報をご覧ください。

また、直接のエントリーも受け付けております。

エントリー(応募フォーム)

Search

Popular

recommended

Categories

Tags