检查目录及其内容是否已锁定的最佳方法是什么?

时间:2018-09-12 09:21:04

标签: java locking

假设我将包含目录路径的字符串传递给随机方法。在此方法开始工作之前,应检查目录或其任何内容是否已锁定。我以为这将是一个简单的任务,但是事实证明,我得到了一些几乎不简单的代码来完成它。您对改善或至少缩短它有什么建议吗?

如果您认为这已经是最好的解决方案,那就给它一个投票,然后继续解决实际问题:P

public static boolean checkLocks(String path) {

    File f = new File(path);

    if(f.isDirectory()) {
        boolean ans = true;;
        String files[] = f.list();

        for (String file : files) {
            File ff = new File(f, file);
            ans = checkLocks(ff.toString());
            if(!ans){
                break;
            }
        }
        return ans;
    } else {
        try {
            RandomAccessFile stream = new RandomAccessFile(path, "rw");
            FileChannel channel = stream.getChannel();

            FileLock lock = null;
            try {
                lock = channel.tryLock();
            } catch (final OverlappingFileLockException e) {
                stream.close();
                channel.close();
                System.out.println("File at "+path+" locked");
                return false;
            }
            stream.close();
            channel.close();
            return true;

        } catch (IOException eio) {
            System.out.println("File at "+path+" does not exits");
            return false;
        }
    }

}

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是使用Files类及其is*方法,例如isReadableisWritable

if (Files.isReadable(new File(filepath).toPath()) &&
    Files.isWritable(new File(filepath).toPath()))
{
    /* do something... */
}

应适用于常规文件和文件夹。