原因:
因为ObjectOutputStream 默认的方法为writeStreamHeader()方法,这个方法使得前面的数据也会写进去。
解决方法:
重写writeStreamHeader()方法,追加写入文件时加个判断语句,是否为第一次写入,然后在取舍是否该过滤信息。
代码如下:
重写writeStreamHeader()方法,使追加写入文件时。判断是否为第一次读取,然后再取舍是否过滤信息
class MyObjectOutputStream extends ObjectOutputStream{
private static File f;
public static MyObjectOutputStream newInstance(File file,OutputStream out) throws IOException {
f=file;
return new MyObjectOutputStream(out);
}
private MyObjectOutputStream(OutputStream out) throws IOException{
super(out);//调用重写的writeStreamHeader()
}
//重写方法
protected void writeStreamHeader() throws IOException {
if(!f.exists() || (f.exists() && f.length() == 0)){
super.writeStreamHeader();
}
else{
super.reset();
}
}
}
写入时的代码:
public void input(Object p,File f){
FileOutputStream fos=null;
try{
fos=new FileOutputStream(f,true);
MyObjectOutputStream oos=MyObjectOutputStream.newInstance(f,fos);
oos.writeObject(p);
fos.close();
oos.close();
}catch(FileNotFoundException ex){
ex.printStackTrace();
}catch(IOException ex2){
ex2.printStackTrace();
}
}