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

Java Java
スポンサーリンク

ここでは CSV ファイルから特定の列だけ抜き出して別ファイルに書き出す Java 例を、初心者向けに丁寧に説明します。
ArrayList と subList は列単位の操作には直接使えませんが、行ごとの ArrayList<String[]> を作って列だけ抜き出す形で実現します。


やること

  1. input.csv を読み込む
  2. ,(カンマ)で分割して ArrayList<String[]> に格納
  3. 抜き出したい列番号を指定して、別のリストに追加
  4. output.csv に書き出す

入力ファイル例(input.csv)

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

今回の例では 「名前」と「国」 だけ抜き出して書き出します。


完成コード

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

public class CSVColumnExtract {
    public static void main(String[] args) {
        BufferedReader br = null;
        PrintWriter pw = null;

        try {
            br = new BufferedReader(new FileReader("input.csv"));

            ArrayList<String[]> rows = new ArrayList<>();
            String line;
            while ((line = br.readLine()) != null) {
                String[] cols = line.split(","); // カンマで分割
                rows.add(cols);
            }

            // 抜き出したい列番号(0-indexed)例:名前=0, 国=2
            int[] columnsToExtract = {0, 2};

            // 書き込み用リスト
            ArrayList<String> outLines = new ArrayList<>();

            for (String[] row : rows) {
                List<String> selectedCols = new ArrayList<>();
                for (int colIndex : columnsToExtract) {
                    if (colIndex < row.length) {
                        selectedCols.add(row[colIndex]);
                    } else {
                        selectedCols.add(""); // 列がない場合は空文字
                    }
                }
                // カンマで結合して一行に
                outLines.add(String.join(",", selectedCols));
            }

            // output.csv に書き出し
            pw = new PrintWriter(new FileWriter("output.csv"));
            for (String s : outLines) {
                pw.println(s);
            }

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

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (br != null) br.close();
                if (pw != null) pw.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
Java

実行結果(output.csv)

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

ポイント解説

split(“,”) で列ごとに分割

  • CSV の各行をカンマで区切って配列にする
  • String[] に格納 → 行ごとのリスト ArrayList<String[]> に追加

抜き出したい列番号を指定

int[] columnsToExtract = {0, 2};
Java
  • 0番目と2番目の列だけ抜き出す
  • 配列が足りない場合は空文字で埋める

書き出すとき

  • String.join(",", selectedCols) で配列をカンマ区切りに変換
  • PrintWriter で行単位に書き込む

応用例

  1. 複数列抽出
int[] columnsToExtract = {1,2}; // 年齢と国
Java
  1. 列の順番を入れ替えて書き出す
int[] columnsToExtract = {2,0}; // 国, 名前
Java
  1. 条件付き抽出(国が Japan の行だけ)
if(row[2].equals("Japan")) { ... }
Java
  1. ArrayList ではなく配列や Stream API を使う方法
  2. ヘッダー行をスキップ / 抽出する方法
Java
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました