java - Android 中写入锁定文件

标签 java android file

我正在 SD 卡上的文件上存储一些数据,并从不同的线程读取相同的文件。为了避免读取和写入的竞争条件,我想在两个场景(读取和写入)中锁定文件

我心里有两个选择 1)我可以使用同步来做到这一点 2)我可以使用文件锁来做到这一点

我应该选择哪一个,为什么?哪一种内存效率更高?

我知道同步方式,但我不知道如何使用文件锁,所以有人可以告诉我使用文件锁的代码吗?

我尝试使用文件锁定,但它在 android 中不起作用,请查看代码。 任何帮助表示赞赏

File syncDatafile = new File(file, "sync.txt");
                FileInputStream fileInputStream = new FileInputStream(syncDatafile);
                java.nio.channels.FileLock lock = fileInputStream.getChannel().lock();
                try{
                    FileWriter writer = new FileWriter(syncDatafile, true);
                    writer.write(data);
                    writer.flush();
                    writer.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }finally{
                    lock.release();
                    fileInputStream.close();
                }

最佳答案

我很抱歉大家,这是我的错误,我使用了用于读取文件的 FileInputStream 。非常抱歉,现在已修复

File syncDatafile = new File(file, "sync.txt");
                FileOutputStream fileoutputStream = new FileOutputStream (syncDatafile);
                java.nio.channels.FileLock lock = fileInputStream.getChannel().lock();
                try{
                    FileWriter writer = new FileWriter(syncDatafile, true);
                    writer.write(data);
                    writer.flush();
                    writer.close();
                }catch(Exception ex){
                    ex.printStackTrace();
                }finally{
                    lock.release();
                    fileInputStream.close();
                }

关于java - Android 中写入锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20042398/

相关文章:

java - 在业务逻辑中访问应用程序上下文实例时出现 NullPointerException。如何访问应用程序上下文的实例?

java - 从其他电脑连接到本地Mysql服务器

java - 如何从java中的字符串中提取最长的子字符串(具有不同的连续字符)

android - 共享元素不能为空 - 共享元素 Activity 转换

file - Haskell 中的二维数组处理

android - 如何在 Xamarin 中获取 Assets 文件路径?

java - setNumStars 和 setRating 在自定义 RatingBar 中不起作用

java - 在 Android 应用程序中拍照并将其保存到图库中

iphone - 编写认证系统

Java - 音效不播放