[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][Servlet] EclipseでのJavaServlet作成

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

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

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

記事を読む

no image

[Java] StringBuilderの使い方(Stringを連結するクラス)

今回は、可変長文字列クラスのStringBuilderを紹介します。 固定長文字列クラスのSt

記事を読む

no image

[Java] 日付の計算方法(DateFormat、Date、Calendar)

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

記事を読む

no image

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

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

記事を読む

スポンサードリンク

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年4月
    1234567
    891011121314
    15161718192021
    22232425262728
    2930  
  • 2024年4月
    1234567
    891011121314
    15161718192021
    22232425262728
    2930  
PAGE TOP ↑