Java:频繁向同一个文件夹中写入、删除文件会有失败吗?

就不贴大段代码了,说一下解决需求时遇到的奇怪情况A线程不断向数据库写入数据,如果数据库断开则会将每条数据写成文件并放入reupload文件夹B线程每隔5秒扫描一次reup... 就不贴大段代码了,说一下解决需求时遇到的奇怪情况

A线程不断向数据库写入数据,如果数据库断开则会将每条数据写成文件并放入reupload文件夹
B线程每隔5秒扫描一次reupload文件夹,重新上传demo.txt文件->删除demo.txt->如果可以上传数据库则上传,如果数据库仍不能连接,则重新写成demo.txt

我在系统日志可以看到
A线程写入文件1.txt
A线程写入文件2.txt
A线程写入文件3.txt
A线程写入文件4.txt
A线程写入文件5.txt
B线程写入文件1.txt(缓存1.txt的内容后,删除1.txt,发现数据库还是不能连接,则重新生成1.txt)
A线程写入文件6.txt
A线程写入文件7.txt

但是现在的情况是,有时日志显示已经写了几百个文件,但是文件夹下却只有四五个文件=。=话说是不是两个线程频繁写入的时候会有冲突呢?我单步调试跟踪了下A、B线程发现单独写文件没有问题,将写文件这个公共方法加上synchronized仍然不行=。=

PS:1、为了查看这种状态,数据库一直就是关闭的2、单独开启A线程而不开启B线程可以看到文件数量符合预期的暴涨,但是B这个处理错误数据的线程也开启就出现上面情况了,但是我单步跟踪B线程的写文件过程发现写文件正常...
展开
 我来答
babyzgm
2014-01-17 · TA获得超过143个赞
知道答主
回答量:91
采纳率:0%
帮助的人:72.8万
展开全部
如果你是windows系统且版本高于xp,你先测试一下单线程循环:
1.flag = 1; create file "temp";
2.create file "test";
3.write flag to file "test";
4.++flag;
5.close file "test";
6.open file "test"; open file "temp",append
7.read from file "test" and write to file "temp";
8.close file "test"
9.delete file "test";
10.goto lable 2;
测试100+试试,你看看最后"temp"文件里面记录是不是连续递增的,看没有重复数据。
win7及以上版本频繁读写同一个文件很bug,相当bug。
longjuelegend
2014-01-18 · TA获得超过821个赞
知道小有建树答主
回答量:483
采纳率:50%
帮助的人:222万
展开全部
具体的文件资源在同一个时刻肯定是要一个线程访问,所以你的这个现象感觉不像线程的问题,感觉是不是你写入数据的过程,文件、流那里的。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-17
展开全部
不会失败的,与文件夹无关,也不是线程冲突问题,确认IO文件写入后关闭文件了么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式