日期:2014-05-20  浏览次数:20740 次

多线程读写的问题
在一个程序中,因为是多线程环境,可能同时有多个线程在写一个文件,我写的方法如下:
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));