[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] 日付の計算方法(DateFormat、Date、Calendar)

こんにちは、kei0310です。 Javaで日付を計算する方法について解説します。 まず

記事を読む

no image

[Java][Framework] Spring BootのJPAでDB接続した際のEntityキャッシュのクリア方法

Spring BootのJPAでDBアクセスした際に、処理を一定量こなすと、Heapが足りなくな

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

[Java][Servlet][JSP] ServletからJSPへの転送

こんにちは。 今回は、「Servletでリクエストを受けて、JSPで表示する。」方法を解説しま

記事を読む

no image

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

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

記事を読む

no image

[Java][基本] ループ処理(for文)

Javaのループ処理の基本である、for文を解説します。 ●文法 for( [①初期化];

記事を読む

no image

[Java][基本] mainメソッドの書き方

こんにちはkeiです。 Javaの基本として、意外と知らないmain関数について解説します。

記事を読む

no image

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

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

記事を読む

no image

[Java][Spring] Spring3でDIしてみる!(アノテーション使用)

Spring3を使って、一番基本的な形のプログラムを作成してみます。 今回は、アノテーションを

記事を読む

スポンサードリンク

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のインストールとかする。 このあたり。

→もっと見る

  • 2024年11月
     123
    45678910
    11121314151617
    18192021222324
    252627282930  
  • 2024年11月
     123
    45678910
    11121314151617
    18192021222324
    252627282930  
PAGE TOP ↑