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

Java Java
スポンサーリンク

ここでは 「オブジェクト配列をコピーしてファイルに書き出す」 例を作ります。
Java ではオブジェクト配列を Arrays.copyOfRangesubList でコピーすると 浅いコピー になります。
今回は、コピーしたオブジェクト配列の内容を CSV 形式でファイルに書き出す パターンを示します。


やること

  1. Person というクラスを定義(名前と年齢)
  2. 配列 Person[] を作る
  3. Arrays.copyOfRange で一部をコピー
  4. コピーした配列を output.csv に書き出す

Person クラスの定義

class Person {
    String name;
    int age;

    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name + "," + age;
    }
}
Java
  • toString() を CSV 形式にしておくと書き出しが簡単
  • 配列コピーは 浅いコピー で参照を複製するだけ

完成コード(オブジェクト配列+書き出し)

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

public class ObjectArrayCopyWrite {
    public static void main(String[] args) {
        // ① 元の配列
        Person[] people = {
            new Person("Tom", 25),
            new Person("Hanako", 30),
            new Person("Yuki", 22),
            new Person("Sara", 28)
        };

        // ② 配列の一部をコピー(1〜3 → Hanako, Yuki, Sara)
        Person[] copy = Arrays.copyOfRange(people, 1, 4);

        // ③ ファイルに書き出す
        try (PrintWriter pw = new PrintWriter(new FileWriter("output.csv"))) {
            for (Person p : copy) {
                pw.println(p); // toString() が呼ばれる
            }
            System.out.println("コピーしたオブジェクト配列を output.csv に書き出しました!");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // ④ 確認
        System.out.println("元の配列:");
        System.out.println(Arrays.toString(people));
        System.out.println("コピー配列:");
        System.out.println(Arrays.toString(copy));
    }
}
Java

実行結果(output.csv)

Hanako,30
Yuki,22
Sara,28

注意点

浅いコピー

Person[] copy = Arrays.copyOfRange(people, 1, 4);
Java
  • copy[i] は元の配列 people[i+1] と同じオブジェクトを参照
  • もし copy[0].name = "Hana" と変更すると、元の people[1] の名前も変わる

独立したコピーを作りたい場合(深いコピー)

Person[] copy = Arrays.copyOfRange(people, 1, 4);
for (int i = 0; i < copy.length; i++) {
    Person p = copy[i];
    copy[i] = new Person(p.name, p.age); // 新しいオブジェクトを作る
}
Java
  • これでコピー配列を変更しても元の配列に影響なし

応用例

  1. CSV 以外の形式(JSON, XML)に書き出す
  2. 配列全体をコピーしてランダムシャッフル
  3. ユーザー入力でコピー範囲を指定
  4. ArrayList に変換して subList で同じ処理

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