如何在不截断文件的情况下检查文件锁定



我最近在我的下载器异步任务中添加了文件锁:

FileOutputStream file = new FileOutputStream(_outFile);
file.getChannel().lock();

下载完成后,file.close()释放锁定。

从一个名为BroadcastReceiver(不同的线程)中,我需要浏览文件并查看哪些已下载,哪些仍处于锁定状态。我从trylock开始:

for (int i=0; i<files.length; i++) {
    try {
        System.out.print((files[i]).getName());
        test = new FileOutputStream(files[i]);
        FileLock lock = test.getChannel().tryLock();
        if (lock != null) {
            lock.release();
            //Not a partial download. Do stuff.
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        test.close();
    }
}

不幸的是,我读到文件在创建文件输出流时被截断(0 字节)。我将其设置为附加,但锁似乎没有生效,所有似乎都已解锁(完全下载)

有没有另一种方法可以检查当前是否对文件应用了写锁定,或者我在这里使用了错误的方法?另外,有没有办法从ADB终端或Eclipse调试文件锁?

这些都行不通。检查Javadoc。锁代表整个过程(即 JVM)持有,而不是由单个线程持有。

我的第一个想法是打开它以根据javadoc进行追加

test = new FileOutputStream(files[i], true); // the true specifies for append

相关内容

  • 没有找到相关文章

最新更新