[Java] CSVファイルの読み込み方法

公開日: : 最終更新日:2014/10/17 Java, 基本 , , ,

こんにちは、kei0310です。

CSVファイルをJavaに取り込む方法を解説します。

とはいっても、普通にファイルを開いてカンマ区切りでListに格納するだけですので、
テンプレートみたいに扱っていただく感じになるかと思います。

今回はいきなりプログラムから。
●CSVReaderクラス

package test.csv;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

/**
 * CSVファイルを読み込むクラス
 * @author kei0310
 *
 */
public class CSVReader {

	private String fileName;
	private Integer num;

	/**
	 * コンストラクタ
	 * @param fileName ファイル名
	 * @param num 読み込み行数(0の場合全量読み込み)
	 */
	public CSVReader(String fileName, int num){

		// フィールド設定
		this.fileName = fileName;
		this.num = num;
	}

	/**
	 * CSVファイルの読み込みを実行する
	 * @return
	 */
	public List<List<String>> read() {

		// 入力チェック
		if(this.fileName == null || this.num == null){
			return null;
		}

		// 返却用リスト箱作成
		List<List<String>> ret = new ArrayList<List<String>>();

		File csv = new File(fileName); // CSVデータファイル

		BufferedReader br = null;

		try {
			// ファイルオープン
			br = new BufferedReader(new FileReader(csv));

			// num行読み込む(0の場合は全行)
			String line = "";
			int idx = 0;
			while ((line = br.readLine()) != null) {

				// 1行を格納する箱作成
				List<String> tmpList = new ArrayList<String>();

				// 文字列index
				int idxFrom = 0;
				int idxTo = 0;
				// 文字列長
				while (true){

					// 最終項目を取得後は終了
					if(idxFrom > line.length()){
						break;
					}

					// 次のセパレータ位置を取得
					idxTo = line.indexOf(",", idxFrom);

					// セパレータが発見できない場合は最終項目を取得
					if( idxTo == -1 ){
						idxTo = line.length();
					}

					// 文字列取得
					String word = line.substring(idxFrom, idxTo);

					// 文字列を格納
					tmpList.add(word);

					// 検索開始位置を更新
					idxFrom = idxTo + 1;
				}

				// 返却用リストに1行データを格納
				ret.add(tmpList);

				// カウンタ
				if(idx % 1000 == 0){
					System.out.println("入力: " + idx + " 件");
				}
				idx++;

				// numを超えたら読み込み終了。numが0のときは全量読む。
				if( num != 0 && idx > num ){
					break;
				}
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (br != null) {
					br.close();
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return ret;
	}
}

●使い方

// CSVファイル読み込み
CSVReader reader = new CSVReader(FILE_PATH + INPUT_FILE_NAME, 0);
// CSVデータ取得
List<List<String>> csv = reader.read();

●解説
処理は至って簡単。
概要だけ抽出すると、以下な感じです。
①2次元配列(List<List>)を作成
②ファイルオープン
③1行読み込み
④読み込んだ1行をカンマ区切りにカットして配列(List)に突っ込む
⑤作成した配列を返却用外側配列(List<List>)に突っ込む

うしろのエラー処理はおまじないです。

うちのPCで実行しても、100万件のデータを数秒で読み込むので、
csvを読み込むのにカンマ区切りしかしてないことを鑑みても
Javaもかなり高速になったなーと思った今日この頃でした。

スポンサードリンク

関連記事

no image

[Java][JSP] EclipseでのJSP作成

今回は、Eclipseを用いてJSPを作成してみます。 まず、Eclipseを起動します。

記事を読む

no image

[java] 文字列の一部を切り取る方法(substring)

こんにちは。 今回は文字列の一部を切り取る方法について解説します。 具体的には、String

記事を読む

no image

[Java][Spring] DIする方式を細かく見てみる① @ScopeでのSingletonとPrototypeの指定

今回は@Scopeアノテーションを用いて、オブジェクトをDIする方式を選択してみます。 ●解説

記事を読む

no image

[Java][MySQL] JavaからMySQLを使う方法

MySQLは、フリーでありながら商用としても使用できるパワーを持つデータベース(RDB)です。

記事を読む

no image

[Java][Servlet] EclipseでのJavaServlet作成

こんにちは、今回はEclipseを使用してJavaServletを作成します。 Eclipse

記事を読む

no image

[Java] Javaのインストール(プログラム開発・入門用)

Javaのコードを書きたい!! という目的のためのJavaのインストール方法と、コマンドラインでの

記事を読む

no image

[Java] Apache POIでExcel操作!

Apache POIをまずは使ってみようという方(自分も含め)のメモ 導入 Maven htt

記事を読む

no image

[Java][Framework] Spring Bootを使って、Spring MVC速攻開発してみる!(DB接続あり)

STSインストール STSは、EclipseにSpring関連のいろいろな機能を詰め込んだオールイ

記事を読む

no image

[Java] クラスとインスタンス

こんにちは。 クラスとインスタンスについて解説します。 インスタンスは「オブジェクト」とも言

記事を読む

no image

[Java][Jersey] JerseyでRESTfulなJAX-RS Webサービス作成

こんにちは、keiです。 今回はRESTfulなWeb Serviceの作成を行っていきます。

記事を読む

スポンサードリンク

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

スポンサードリンク

no image
CentOSにdockerをインストールしてみた

前置き dockerをcentos7にインストールしてみました

no image
awkでのgsubを使った文字列置換(正規表現)

まえおき bashなどのシェルスクリプトで、lsした結果とかを

no image
bashで並列処理する方法(xargs)

並列処理とは 通常、意識せずにプログラムを書くと、大体の場合は

no image
AWS Redshiftの使用ストレージ容量をクエリで調べる方法

用途 AWS Redshfitのコンソールを見れば、使用中のス

no image
pythonでstorage transfer serviceを使ってみた。

準備 pythonのインストールとかする。 このあたり。

→もっと見る

  • 2022年8月
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
  • 2022年8月
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
PAGE TOP ↑