代码之家  ›  专栏  ›  技术社区  ›  NoBugs

如何在不截断文件的情况下检查FileLock?

  •  4
  • NoBugs  · 技术社区  · 13 年前

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

    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调试文件锁?

    2 回复  |  直到 13 年前
        1
  •  2
  •   user207421    13 年前

    这些都不会奏效。查看Javadoc。锁是代表整个进程(即JVM)持有的,而不是由单个线程持有的。

        2
  •  2
  •   RHSeeger    13 年前

    我的第一个想法是打开它以根据 javadocs

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