Java | ファイルから読み込んだ配列を一部だけ書き出す例(IOと組み合わせる)

Java Java
スポンサーリンク

ここでは Java 7 以降で使える try-with-resources を使った、安全にファイルを読み書きするバージョンを作ります。
これにより、finally で手動で close する必要がなくなり、例外発生時でも自動でリソースが閉じられます。


やること(CSV 特定列抽出版)

  1. input.csvBufferedReader で読み込む
  2. , で分割して ArrayList<String[]> に格納
  3. 指定した列だけ抜き出す
  4. PrintWriteroutput.csv に書き出す

完成コード(try-with-resources 版)

import java.util.*;
import java.io.*;

public class CSVColumnExtractSafe {
    public static void main(String[] args) {
        // 抜き出したい列番号(0-indexed)
        int[] columnsToExtract = {0, 2}; // 名前, 国

        // try-with-resources で BufferedReader と PrintWriter を同時に管理
        try (
            BufferedReader br = new BufferedReader(new FileReader("input.csv"));
            PrintWriter pw = new PrintWriter(new FileWriter("output.csv"))
        ) {
            ArrayList<String[]> rows = new ArrayList<>();
            String line;

            // ファイル読み込み
            while ((line = br.readLine()) != null) {
                String[] cols = line.split(",");
                rows.add(cols);
            }

            // 特定列を抜き出して書き込み
            for (String[] row : rows) {
                List<String> selectedCols = new ArrayList<>();
                for (int colIndex : columnsToExtract) {
                    if (colIndex < row.length) {
                        selectedCols.add(row[colIndex]);
                    } else {
                        selectedCols.add(""); // 列がない場合は空文字
                    }
                }
                pw.println(String.join(",", selectedCols));
            }

            System.out.println("特定列の抽出が完了しました! output.csv を確認してください。");

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Java

ポイント解説

try-with-resources の特徴

try (
    BufferedReader br = new BufferedReader(new FileReader("input.csv"));
    PrintWriter pw = new PrintWriter(new FileWriter("output.csv"))
) {
    ...
}
Java
  • brpwブロック終了時に自動で close される
  • 例外発生時でもリソースリークが起きない
  • finally で手動で閉じる必要がなくなる

CSV 特定列抽出の流れ

  1. 行ごとに split(",") で分割
  2. 抜き出したい列番号をループで選択
  3. String.join(",", selectedCols) で結合
  4. PrintWriter で一行ずつ書き込み

出力例(output.csv)

入力ファイル:

名前,年齢,国
Tom,25,USA
Hanako,30,Japan
Yuki,22,Japan
Sara,28,UK

指定列 {0, 2} で出力:

名前,国
Tom,USA
Hanako,Japan
Yuki,Japan
Sara,UK

応用ポイント

  • 列番号を配列で指定 することで、抜き出す列を簡単に変更可能
  • 条件付き抽出 も組み込める if (row[2].equals("Japan")) { ... }
  • ファイル読み書きのエラー(FileNotFoundException, IOException)も catch で一括管理

💡 このバージョンは 安全かつ簡潔 にファイル操作ができるので、現場でもよく使われます。

Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました