Java 将新对象追加到现有文件

Java 将新对象追加到现有文件,java,object,serialization,objectoutputstream,objectinputstream,Java,Object,Serialization,Objectoutputstream,Objectinputstream,您好,我在尝试将新对象附加到现有文件时遇到问题。。 一旦android应用程序再次启动,我想获取现有文件并添加新对象,然后从现有文件读取对象。。。实际上,当我试图读取对象时,代码将只读取第一个对象。。您可以在下面的代码中找到。。你能帮忙吗?谢谢 使用以下方法写入对象: public void saveObject(Person p, File f){ try { ObjectOutputStream oos = new ObjectOutputStrea

您好,我在尝试将新对象附加到现有文件时遇到问题。。 一旦android应用程序再次启动,我想获取现有文件并添加新对象,然后从现有文件读取对象。。。实际上,当我试图读取对象时,代码将只读取第一个对象。。您可以在下面的代码中找到。。你能帮忙吗?谢谢

使用以下方法写入对象:

 public void saveObject(Person p, File f){
     try
     {

         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f, true));
         oos.writeObject(p);
         oos.reset();
         oos.flush(); 
         oos.close();


     }
     catch(Exception ex)
     {
        Log.v("Serialization Save Error : ",ex.getMessage());
        ex.printStackTrace();
     }
}
    public Object loadSerializedObject(File f)
{

       try {
          ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
           try{
              Object loadedObj = null;
              while ((loadedObj = ois.readObject()) != null) {
              Log.w(this.getClass().getName(), "ReadingObjects") ;

            }
              return objects;
           }finally{
               ois.close();
           }

       } catch (StreamCorruptedException e) {
           e.printStackTrace();
       } catch (IOException e) {

           e.printStackTrace();
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
       return null;
}
使用以下方法读取对象:

 public void saveObject(Person p, File f){
     try
     {

         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f, true));
         oos.writeObject(p);
         oos.reset();
         oos.flush(); 
         oos.close();


     }
     catch(Exception ex)
     {
        Log.v("Serialization Save Error : ",ex.getMessage());
        ex.printStackTrace();
     }
}
    public Object loadSerializedObject(File f)
{

       try {
          ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f));
           try{
              Object loadedObj = null;
              while ((loadedObj = ois.readObject()) != null) {
              Log.w(this.getClass().getName(), "ReadingObjects") ;

            }
              return objects;
           }finally{
               ois.close();
           }

       } catch (StreamCorruptedException e) {
           e.printStackTrace();
       } catch (IOException e) {

           e.printStackTrace();
       } catch (ClassNotFoundException e) {
           e.printStackTrace();
       }
       return null;
}

不幸的是,您无法在每次希望附加到流中时创建一个新的
ObjectOutputStream
,然后用一个流将所有内容读回。在您开始写入对象之前,会将标题添加到基础流中。您可能看到
java.io.StreamCorruptedException:invalid type code:AC
异常,这是因为第一个头是
0xAC


我不知道您正在处理多少个对象,但一个选项可能是读取所有对象,然后使用单个
ObjectOutputStream
重写它们。如果有很多东西的话,那会很贵。或者,您可能需要考虑手动管理序列化。但返回对象时可能会很痛苦。

对象在哪里声明?您在哪里为对象分配任何值?可能是因为您正在将不同的对象写入不同的文件,如果是这样,您是否实际获取了所有写入文件的对象?