如何在android上使用FileLock?

时间:2013-02-28 18:42:53

标签: java android filelock

我认为,当我看到此链接时,我们可以锁定文件以进行独占访问:http://developer.android.com/reference/java/nio/channels/FileLock.html

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

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

4 个答案:

答案 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)

  1. 您可以尝试lock()阻止,trylock()阻止
  2. FileLock不适用于FileInputStream
  3. 在Android中,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编写,因此必须获取共享锁。