くらげになりたい。

くらげのようにふわふわ生きたい日曜プログラマなブログ。趣味の備忘録です。

Apache Commons CSV(commons-csv)を使って、CSVファイルを読み書きする

CSVファイルを操作ことがあったので、その備忘録。
commons-csvすごい。

Dependencies

MavenのDependenciesに以下を追加。

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-csv</artifactId>
      <version>1.4</version>
    </dependency>

CSVファイルを読み込む

CSVファイルを読むときの使い方はこんな感じ。

String filePath = "/sample.csv";

//try-resourceでInputStreamReaderを取得
try (InputStream is = getClass().getResourceAsStream(filePath);
     BufferedReader br = new BufferedReader(new InputStreamReader(is))) {

    //CSVParserを取得する。読み込み方とかはここで設定。
    CSVParser parser = CSVFormat
        .EXCEL                                        // ExcelのCSV形式を指定
        .withIgnoreEmptyLines(true)                   // 空行を無視する
        .withHeader("Header1", "Header2")             // ヘッダの指定
        .withFirstRecordAsHeader()                    // 最初の行をヘッダーとして読み飛ばす
        .withIgnoreSurroundingSpaces(true)            // 値をtrimして取得する
        .parse(br);

    // CSVのレコードを取得
    List<CSVRecord> recordList = parser.getRecords();

    // CSVRecordに各カラムが入っているので、よしなにやる
    for (CSVRecord record : recordList ) {
        System.out.printLn(record.get(0));
    }

} catch (IOException e) {
    // 例外ハンドリング
}

CSVファイルを書き込む

CSVファイルに書き込むときの使い方はこんな感じ。

File file = "./sample.csv";

//try-resourceでOutputStreamWriterを取得
try (BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), "shift-jis"))) {

    // CSVPrinterを取得。書き込みの設定とかする
    CSVPrinter printer = CSVFormat
        .EXCEL                             // ExcelのCSV形式を指定
        .withHeader("Header1", "Header2")  // ヘッダの指定
        .print(bw);

    // CSVのレコードを書込
    printer.printRecord("Col1-1", "Col2-1", "Col3-1");
    printer.printRecord("Col1-2", "Col2-2", "Col3-2");

} catch (IOException e) {
    // 例外ハンドリング
}

リファレンス

基本的に使い方はシンプル。設定も色々あるので、Commons CSV – User Guideとかを見て、設定する感じ。

以上!!

参考にしたサイト様