このエントリーをはてなブックマークに追加


CSV取込みサンプルを作ってみた

CSVファイルを1行ずつ読み込み、Stringのsplitで分割し、ArrayListに格納するサンプルを以下に記します。

関連記事

注意事項

本サンプルソースは、ファイルの読み込み部分をtry-with-resourcesで記述していますので、Java7以降でコンパイルおよび実行してください。
テキストファイルの読み込みについては以下の記事を参考にしてください。

CSV取込みサンプルソース

本サンプルソースは、引数で渡されたファイルの有無を調べます。
ファイルが存在しない場合は、処理を中断します。
引数が未指定の場合は、usage()が呼び出され処理を中断します。
ファイルの文字コードについては、System.getProperty("file.encoding")でデフォルトの文字コードを取得しています。

引数に指定されたファイルを開き、カンマ(,)でsplitしたStringの配列(String[])をArrayListに追加しています。
その後、幅10で(%10s)でCSVを整形し表示しています。
尚、全角の場合はString.formatの%sでは、半角分広がり崩れてしまいますが、サンプルソースなので表示の崩れ対応はしていません。
ListにStringの配列で格納すれば、以後、編集が楽であろうと思い作成したサンプルソースになります。

fileReadCsv.java LF

import java.util.List;
import java.util.ArrayList;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.FileNotFoundException;
import java.io.IOException;

class ReadCsv {
    String csvfile;

    private String getCsvFilename() {
        return this.csvfile;
    }

    private void setCsvFilename(String s) {
        this.csvfile = s;
    }

    private void usage() {
        System.err.println("Usage: java ReadCsv <csv file>");
    }

    // constructor
    ReadCsv(String[] args) {
        // check args
        if (args.length != 1) {
            usage();
            System.exit(1);
        }
        // check file
        if (!(new File(args[0])).exists()) {
            System.err.println(args[0] + ": file not found.");
            System.exit(2);
        }
        // set csv filename
        setCsvFilename(args[0]);
    }

    // read csvfile
    private List<String[]> readCsvfile2Array() {
        String csv = this.getCsvFilename();
        List<String[]> csvList = new ArrayList<String[]>();
        try (BufferedReader br = new BufferedReader(
            new InputStreamReader(
                new FileInputStream(csv), System.getProperty("file.encoding")))) {
            String l = br.readLine();
            while (l != null) {
                csvList.add(l.split(","));
                l = br.readLine();
            }
        } catch (FileNotFoundException e) {
            System.err.println(csv + " not found.");
        } catch (IOException e) {
            System.err.println("I/O error.");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return csvList;
    }

    // main
    public static void main(String[] args) {
        ReadCsv me = new ReadCsv(args);
        List<String[]> csvList = me.readCsvfile2Array();
        // display csvList
        if (csvList != null) {
            System.out.printf("%d line\n", csvList.size());
            for (String[] s : csvList) {
                String l ="|";
                for (int i = 0; s.length > i; i++) {
                    l += String.format("%10s|", s[i]);
                }
                System.out.println(l);
            }
        }
    }
}

実行結果

上記のサンプルソースをコンパイルして実行してみます。
使用したCSVファイルは以下の通りです。

filedata.csv UTF-8, LF

Java,Ruby,Python,Perl,PHP
10,20,30,40,50
あ,い,う,え,お
  1. コンパイルします。
    $ javac ReadCsv.java 
     
  2. 実行します。
    $ java ReadCsv data.csv 
    3 line
    |      Java|      Ruby|    Python|      Perl|       PHP|
    |        10|        20|        30|        40|        50|
    |         あ|         い|         う|         え|         お|

ちなみに引数なし、引数に指定したファイルがない場合は以下のような出力となります。

$ java ReadCsv
Usage: java ReadCsv <csv file>
$ java ReadCsv foo.csv
foo.csv: file not found.

以上、JavaでCSVファイルを読み込み、加工しやすい?ListにString[]で格納するサンプルソースでした。


添付ファイル: filedata.csv 399件 [詳細] fileReadCsv.java 419件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-12 (水) 17:17:48