我认为,当我看到此链接时,我们可以锁定文件以进行独占访问:http://developer.android.com/reference/java/nio/channels/FileLock.html
我想在后台进程(服务)和真实的前台应用程序中创建一个保存/加载文件。他们可能会同时尝试访问此文件,在这种情况下,应该等待。
我在Android上找不到FileLock的真实示例,我只读了许多线程,这在Android上是不可能的。但如果是这样,为什么文档中有“FileLock”部分?
答案 0 :(得分:5)
这适用于普通的Java应用程序:
File file = ...;
FileInputStream fis = new FileInputStream(file); // or FileOutputStream fos = new FileOutputStream(file);
FileLock lock = fis.getChannel().lock(); // or FileLock lock = fos.getChannel().lock();
// do whatever you want with the file
lock.release();
答案 1 :(得分:4)
lock()
阻止,trylock()
阻止FileLock
不适用于FileInputStream
。FileLock
在进程之间工作,但在进程中的线程之间不起作用。答案 2 :(得分:1)
我认为文件锁定适用于"内部"手机内存但不能在SD卡上工作。
答案 3 :(得分:1)
FileLock仅在获取为共享锁时才对FileInputStream BUT有效。
FileInputStream fis = new FileInputStream(file + ext);
FileChannel fileChannel = fis.getChannel();
FileLock fileLock = fileChannel.tryLock(0L, Long.MAX_VALUE, /*shared*/true);
实际上这是有道理的。共享锁意味着可以有任意数量的同时读者,但不允许写入者。默认独占锁为进程提供独占访问权限。由于无法使用FileInputStream编写,因此必须获取共享锁。