为了账号安全,请及时绑定邮箱和手机立即绑定

让文件支持类似事务的功能

让文件支持类似事务的功能

aluckdog 2019-03-01 10:44:05
在多个用户操作同1个文件的情况下,可能会造成数据的丢失。显然想实现类似数据库事务的功能,如果用户1的操作成功,则将其到文件中,而如果用户1的操作成功,则进行回滚不写入到文件中。
查看完整描述

7 回答

?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

为什么不直接使用数据库呢,如果你在文件系统上加上事务的功能,相当于你实现了一个乞丐版的数据库。
推荐使用SQlLite嵌入式本地文件数据库,非常轻量级,单文件,完整支持SQL标准

查看完整回答
反对 回复 2019-03-01
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

用类似git的版本控制可能会好些~

去了解一下github的用法

查看完整回答
反对 回复 2019-03-01
?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

加锁:
类似于 数据库加锁的原理:
用memcache 或者 redis 加个内存锁

每次去操作文件的时候 去看看锁有没有被释放,如有有锁 说明已经有用户在操作了
操作完毕 释放锁

查看完整回答
反对 回复 2019-03-01
?
慕桂英546537

TA贡献1848条经验 获得超10个赞

用锁,悲观锁 java

查看完整回答
反对 回复 2019-03-01
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

加锁 或者用队列实现

查看完整回答
反对 回复 2019-03-01
?
慕森卡

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自己补全吧

查看完整回答
反对 回复 2019-03-01
  • 7 回答
  • 0 关注
  • 583 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信