在多个用户操作同1个文件的情况下,可能会造成数据的丢失。显然想实现类似数据库事务的功能,如果用户1的操作成功,则将其到文件中,而如果用户1的操作成功,则进行回滚不写入到文件中。
7 回答
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
为什么不直接使用数据库呢,如果你在文件系统上加上事务的功能,相当于你实现了一个乞丐版的数据库。
推荐使用SQlLite嵌入式本地文件数据库,非常轻量级,单文件,完整支持SQL标准
Smart猫小萌
TA贡献1911条经验 获得超7个赞
加锁:
类似于 数据库加锁的原理:
用memcache 或者 redis 加个内存锁
每次去操作文件的时候 去看看锁有没有被释放,如有有锁 说明已经有用户在操作了
操作完毕 释放锁
慕森卡
TA贡献1806条经验 获得超8个赞
用fileLock会好一点,读锁,写锁全有
`FileOutputStream fo = new FileOutputStream("123.txt");
FileLock lock = fo.getChannel().lock();//写锁 互斥
Writer writer = new OutputStreamWriter(fo);
writer.write("test");
lock.release();
FileInputStream fi = new FileInputStream("123.txt");
lock = fi.getChannel().lock(0, Long.MAX_VALUE, true);//文档从位置0,锁到Long.MAX_VALUE,共享锁,排斥写
BufferedReader reader = new BufferedReader(new InputStreamReader(fi));
reader.readLine();
lock.release();
fi.close();`
try catch自己补全吧
添加回答
举报
0/150
提交
取消