多线程读写的问题
在一个程序中,因为是多线程环境,可能同时有多个线程在写一个文件,我写的方法如下:
synchronized void recordErr(URL url)
{
try
{
BufferedWriter bw=new BufferedWriter(new FileWriter( "E:\\eclipse\\workspace\\Rev/err.txt "));
bw.write(url.toString());
bw.newLine();
bw.flush();
bw.close();
}
catch (
IOException e)
{
// TODO 自动生成 catch 块
System.out.println( "RecordErr failed "+url.toString());
e.printStackTrace();
}
}
我调试的时候发现,最后记录中总是只有一条记录,也就是,覆盖了其它结果了,不知道为什么?请指教。
------解决方案--------------------写入方式为APPEND
------解决方案--------------------你现在方法是重新文件,应该用追加模式
------解决方案--------------------楼主:IO的关闭操作最好在finally中执行,你这样的代码在try中出现异常时,文件流不会关闭!!
------解决方案--------------------因为BufferedWriter bw=new BufferedWriter(new FileWriter( "E:\\eclipse\\workspace\\Rev/err.txt "));这句在方法里面
,每次都是重新读取文件,每调用该方法一次,重写写文件,所以文件里只有
一条数据,可以用RandomAccessFile读取文件,每次在文件的末
尾写入数据,这样就不会只有一条数据
------解决方案--------------------BufferedWriter bw=new BufferedWriter(new FileWriter( "E:\\eclipse\\workspace\\Rev/err.txt "));
改成
BufferedWriter bw=new BufferedWriter(new FileWriter( "E:\\eclipse\\workspace\\Rev/err.txt ",true));
------解决方案--------------------BufferedWriter bw=new BufferedWriter(new FileWriter( "E:\\eclipse\\workspace\\Rev/err.txt "));
改成
BufferedWriter bw=new BufferedWriter(new FileWriter( "E:\\eclipse\\workspace\\Rev/err.txt ",true));