我将一些数据存储在SD卡上的文件中,并从不同的线程读取相同的文件。为了避免阅读和写作的竞争条件,我想在场景(阅读和写作)中锁定文件
我脑子里有两种选择 1)我可以使用Synchronization执行此操作 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();
}
答案 0 :(得分:5)
我很抱歉,我错误地使用了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();
}