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

在多个用户操作同1个文件的情况下,可能会造成数据的丢失。显然想实现类似数据库事务的功能,如果用户1的操作成功,则将其到文件中,而如果用户1的操作成功,则进行回滚不写入到文件中。

阅读 6.3k
7 个回答

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

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

去了解一下github的用法

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

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

用锁,悲观锁 java

加锁 或者用队列实现

// 方案1:利用RandomAccessFile的文件操作选项s,s即表示同步锁方式写
RandomAccessFile file = new RandomAccessFile(file, "rws");

抄来的,原文见:
http://blog.csdn.net/kjfcpua/...

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题