ここでは 「オブジェクト配列をコピーしてファイルに書き出す」 例を作ります。
Java ではオブジェクト配列を Arrays.copyOfRange や subList でコピーすると 浅いコピー になります。
今回は、コピーしたオブジェクト配列の内容を CSV 形式でファイルに書き出す パターンを示します。
やること
Personというクラスを定義(名前と年齢)- 配列
Person[]を作る Arrays.copyOfRangeで一部をコピー- コピーした配列を
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;
}
}
JavatoString()を 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);
Javacopy[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- これでコピー配列を変更しても元の配列に影響なし
応用例
- CSV 以外の形式(JSON, XML)に書き出す
- 配列全体をコピーしてランダムシャッフル
- ユーザー入力でコピー範囲を指定
- ArrayList に変換して
subListで同じ処理
