Java - 锁定独占访问的文件
问题描述:
我的问题是这样的:我使用WatchService
来获得关于特定文件夹中的新文件的通知,现在如果文件在所述文件夹中被移动/复制或创建,则触发事件并返回新文件的名称。现在的问题是,如果我尝试访问该文件并且尚未完全访问(例如复制仍在进行中),则会引发异常。我试过是做这样的事情:Java - 锁定独占访问的文件
RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
FileChannel fc = raf.getChannel();
FileLock lck = fc.lock();
但即使锁被收购,有时仍然是一个异常被,如果我尝试写入文件,因为另一个进程仍具有打开的句柄给它提出的。
现在,Java中的文件如何被锁定以实现真正的独占访问?
答
对于我来说,语句
RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
返回一个FileNotFoundException异常,如果我不能获得该文件的锁。我赶上filenotfound异常,并把它...
public static boolean isFileLocked(String filename) {
boolean isLocked=false;
RandomAccessFile fos=null;
try {
File file = new File(filename);
if(file.exists()) {
fos=new RandomAccessFile(file,"rw");
}
} catch (FileNotFoundException e) {
isLocked=true;
}catch (Exception e) {
// handle exception
}finally {
try {
if(fos!=null) {
fos.close();
}
}catch(Exception e) {
//handle exception
}
}
return isLocked;
}
,你可以在一个循环中运行这一点,等到你在文件上的锁。不会行
FileChannel fc = raf.getChannel();
如果文件被锁定,永远不会到达?你会得到一个FileNotFoundException抛出..