将项目附加到目标文件

Appending Items to an object file

我知道有类似的问题,但其中 none 对我有帮助,因为我尝试了他们的方法,但根本不起作用。我将不胜感激有关此主题的任何建议

我在将对象附加到对象文件时遇到问题。我正在尝试执行注册过程,并且正在使用此方法写入对象文件。

public void WriteObjectToFile(Object serObj, String filepath) { 

    try {
        boolean exists;
        if(!(new File(filepath).isFile())){
            exists = false;
        }else{
            exists = true;
        }
        FileOutputStream fileOut = new FileOutputStream(filepath);
        ObjectOutputStream objectOut = null;
        if(!exists){
            System.out.println("Normal");
            objectOut = new ObjectOutputStream(fileOut);
        }else{
            System.out.println("Custom");
            objectOut = new AppendingObjectOutputStream(fileOut);
        }
        objectOut.writeObject(serObj);
        objectOut.close();
        System.out.println("The Object  was succesfully written to a file");

    } catch (Exception ex) {
        ex.printStackTrace();
    }
}

自定义 AppendingObjectOutputStreamClass 如下所示:

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;

public class AppendingObjectOutputStream extends ObjectOutputStream {

public AppendingObjectOutputStream(OutputStream out) throws IOException {
    super(out);
}

@Override
protected void writeStreamHeader() throws IOException {
    reset();
}

}

if 语句检查文件是否存在。如果不是,则表示它是第一个对象,因此我使用普通的 ObjectOutputStream。如果它不是第一个,那么我使用自定义的 AppendingObjectOutputStream,但这仍然给我一个 StreamCorruptedErrorException。

如有任何帮助,我们将不胜感激。

替换

FileOutputStream fileOut = new FileOutputStream(filepath);

FileOutputStream fileOut = new FileOutputStream(filepath,true);

查看 https://docs.oracle.com/javase/9/docs/api/java/io/FileOutputStream.html#FileOutputStream-java.io.File-boolean- 了解更多详情。