シリアライズとデシリアライズをし、ファイルにオブジェクトの読み書きをしたいです。追加の書き込みはできるのですが、読み込みが上手くいきません。
何度読み込んでも、ファイルに一番初めに書き込んだオブジェクトしか得ることが出来ません。
ファイルに書き込んだすべてのオブジェクトを読み込みたいです。
main関数でループを回すという方法を考え、RandomAccessFileを使いファイルポインタの動かしてというやり方をしていたのですが上手くいきませんでした。
1行ずつ読み込むという方法もあったのですが、オブジェクトでは型が違いますとエラーになってしまいます。
もしうまい方法を知っている方がいればぜひ教えてください。
よろしくお願い致します。
Member.javaファイル
Java
1package hello; 2 3import java.io.Serializable; 4 5public class Member implements Serializable { 6 7 public String name; // 氏名 8 public int age; // 年齢 9}
SerializableSampleTest.javaファイル
Java
1package hello; 2import java.io.FileInputStream; 3 4import java.io.FileOutputStream; 5import java.io.IOException; 6import java.io.ObjectInputStream; 7import java.io.ObjectOutputStream; 8import java.util.ArrayList; 9import java.util.List; 10 11 12public class SerializableSampleTest { 13 public static void main(String[] args) { 14 SerializableSampleTest sst1 = new SerializableSampleTest(); 15 SerializableSampleTest sst2 = new SerializableSampleTest(); 16 17 18 // 一人目 19 Member mb1 = new Member(); 20 mb1.name = "sakura"; 21 mb1.age = 20; 22 23 List Akumi = new ArrayList(); 24 Akumi.add(mb1.name); 25 Akumi.add(mb1.age); 26 27 sst1.write(Akumi); 28 29 // 二人目 30 Member mb2 = new Member(); 31 mb2.name = "yuri"; 32 mb2.age = 19; 33 34 List Bkumi = new ArrayList(); 35 Bkumi.add(mb2.name); 36 Bkumi.add(mb2.age); 37 38 sst2.write(Bkumi); 39 40 41 System.out.println(sst1.read()); 42 System.out.println(sst2.read()); 43 44 45 46 } 47 48 public void write(java.util.List<Member> Mem) { 49 // シリアライズ 50 try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("member", true))) { 51 oos.writeObject(Mem); 52 System.out.println("シリアライズ完了"); 53 oos.close(); 54 55 } catch (IOException e) { 56 System.out.println("error"); 57 } 58 } 59 60 public java.util.List<Member> read(){ 61 java.util.List<Member> Mem = null; 62 63 // デシリアライズ 64 try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("member"))) { 65 Mem = (List<Member>) ois.readObject(); 66 System.out.println("デシリアライズ完了"); 67 ois.close(); 68 } catch (IOException | ClassNotFoundException e) { 69 System.out.println("error"); 70 } 71 return Mem; 72 } 73 74 }

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/23 11:27