4

我最近在我的下载器 asynctask 中添加了文件锁:

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();
    }
}

不幸的是,当创建 FileOutputStream 时,我读到文件被截断(0 字节)。 我设置为追加,但锁似乎没有生效,所有似乎都未锁定(完全下载)

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

4

2 回答 2

2

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

test = new FileOutputStream(files[i], true); // the true specifies for append
于 2012-10-04T03:04:53.220 回答
2

None of this is going to work. Check the Javadoc. Locks are held on behalf of the entire process, i.e. the JVM, not by individual threads.

于 2012-10-04T03:10:10.190 回答