假设我将包含目录路径的字符串传递给随机方法。在此方法开始工作之前,应检查目录或其任何内容是否已锁定。我以为这将是一个简单的任务,但是事实证明,我得到了一些几乎不简单的代码来完成它。您对改善或至少缩短它有什么建议吗?
如果您认为这已经是最好的解决方案,那就给它一个投票,然后继续解决实际问题: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;
}
}
}
答案 0 :(得分:1)
我认为最简单的方法是使用Files
类及其is*
方法,例如isReadable
和isWritable
。
if (Files.isReadable(new File(filepath).toPath()) &&
Files.isWritable(new File(filepath).toPath()))
{
/* do something... */
}
应适用于常规文件和文件夹。