关于集合追加写入文件中,会重复前面的内容的解决
2017-12-21 12:19
387 查看
原因:
因为ObjectOutputStream 默认的方法为writeStreamHeader()方法,这个方法使得前面的数据也会写进去。
解决方法:
重写writeStreamHeader()方法,追加写入文件时加个判断语句,是否为第一次写入,然后在取舍是否该过滤信息。
代码如下:
重写writeStreamHeader()方法,使追加写入文件时。判断是否为第一次读取,然后再取舍是否过滤信息
class MyObjectOutputStream extends ObjectOutputStream{
private static File f;
}
写入时的代码:
因为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(); } }
相关文章推荐
- PHP文件写入函数file_put_contents并发追加写入丢失内容问题解决方法
- 关于ASP程序运行出现ADODB.Stream 错误 800a0bbc 写入文件失败 的解决办法!
- 关于键盘过滤驱动中写入文件乱码的问题的解决!
- 关于头文件变量重复定义问题怎么解决(thinkvd开发日志)
- 关于多文件引用头文件变量重复定义的解决办法【BCB2010环境】
- 关于 "CS0016: 未能写入输出文件" 的解决办法
- 关于ASP程序运行出现ADODB.Stream 错误 800a0bbc 写入文件失败 的解决办法!
- 关于写入文件缓存时报"java.io.FileNotFoundException open failed (is a director)"错误的解决方法
- 关于 IIS7.0下文件写入无权限的解决办法
- java写入文件(文件内容末尾追加)
- 关于C++/C中防止头文件的重复包含的解决办法
- 关于未能写入输出文件C:/Windows/Temporary ASP.NET Files/WebApp/错误的解决
- 关于C++/C中防止头文件的重复包含的解决办法
- 文件操作(列出文件夹下的所有文件、向文本文件中写入内容或追加新内容)
- 关于ASP程序运行出现ADODB.Stream 错误 800a0bbc 写入文件失败 的解决办法!
- c++中mfc写文件 把信息写入文件不覆盖原来的内容问题解决
- 关于ListView的Adapter,解决ListView滚动后内容重复的问题
- 关于 "CS0016: 未能写入输出文件" 的解决办法 编译器错误信息: CS0016: 未能写入输出文件“c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\Temporary ASP.NET Files\listenleaks\ae3daa38\e9fdb67
- asp.net 导入CSV 文件内容 到 SQL Server 数据库 解决CSV内容数据重复添加问题
- 写入出字符串到一个文件而不覆盖原文件的内容(追加)