ファイルに書き込んだオブジェクトを全て読み込みたいが、先頭にある1つ目しか読み込むことができない
シリアライズとデシリアライズをし、ファイルにオブジェクトの読み書きをしたいです。追加の書き込みはできるのですが、読み込みが上手くいきません。
何度読み込んでも、ファイルに一番初めに書き込んだオブジェクトしか得ることが出来ません。
ファイルに書き込んだすべてのオブジェクトを読み込みたいです。
main関数でループを回すという方法を考え、RandomAccessFileを使いファイルポインタの動かしてというやり方をしていたのですが上手くいきませんでした。
1行ずつ読み込むという方法もあったのですが、オブジェクトでは型が違いますとエラーになってしまいます。
もしうまい方法を知っている方がいればぜひ教えてください。
よろしくお願い致します。
Member.javaファイル
package hello;
import java.io.Serializable;
public class Member implements Serializable {
public String name; // 氏名
public int age; // 年齢
}
SerializableSampleTest.javaファイル
package hello;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
public class SerializableSampleTest {
public static void main(String[] args) {
SerializableSampleTest sst1 = new SerializableSampleTest();
SerializableSampleTest sst2 = new SerializableSampleTest();
// 一人目
Member mb1 = new Member();
mb1.name = "sakura";
mb1.age = 20;
List Akumi = new ArrayList();
Akumi.add(mb1.name);
Akumi.add(mb1.age);
sst1.write(Akumi);
// 二人目
Member mb2 = new Member();
mb2.name = "yuri";
mb2.age = 19;
List Bkumi = new ArrayList();
Bkumi.add(mb2.name);
Bkumi.add(mb2.age);
sst2.write(Bkumi);
System.out.println(sst1.read());
System.out.println(sst2.read());
}
public void write(java.util.List<Member> Mem) {
// シリアライズ
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("member", true))) {
oos.writeObject(Mem);
System.out.println("シリアライズ完了");
oos.close();
} catch (IOException e) {
System.out.println("error");
}
}
public java.util.List<Member> read(){
java.util.List<Member> Mem = null;
// デシリアライズ
try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("member"))) {
Mem = (List<Member>) ois.readObject();
System.out.println("デシリアライズ完了");
ois.close();
} catch (IOException | ClassNotFoundException e) {
System.out.println("error");
}
return Mem;
}
}