3

我认为我们能够锁定文件以进行独占访问,因为我看到了这个链接:http: //developer.android.com/reference/java/nio/channels/FileLock.html

我想在后台进程(服务)和真正的前台应用程序中创建一个保存/加载文件。他们可能会尝试同时访问此文件,在这种情况下,应该等待。

我在 android 上找不到 FileLock 的真实示例,我刚刚阅读了许多线程,这在 Android 上是不可能的。但如果是这样,为什么文档中有一个“FileLock”部分?

4

4 回答 4

7

这适用于普通的 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();
于 2013-02-28T18:46:27.860 回答
5
  1. 您可以尝试lock()使用阻塞和trylock()不阻塞
  2. FileLock不工作FileInputStream
  3. 在 Android 中,FileLock可以在进程之间工作,但不能在进程中的线程之间工作。
于 2013-10-04T13:03:55.480 回答
2

FileLock 仅在作为共享锁获取时才对 FileInputStream 起作用。

  FileInputStream fis = new FileInputStream(file + ext);
  FileChannel fileChannel = fis.getChannel();
  FileLock fileLock = fileChannel.tryLock(0L, Long.MAX_VALUE, /*shared*/true);

其实这是有道理的。共享锁意味着可以有任意数量的同时读取者,但不允许写入者。而默认独占锁则赋予进程独占访问写入权限。由于您无法使用 FileInputStream 进行编写,因此您必须在其上获取共享锁。

于 2015-11-04T09:09:40.637 回答
1

我认为文件锁定适用于“内部”手机内存,但不适用于 SD 卡。

于 2013-08-27T05:30:05.637 回答