ice*_*fex 5 java locking file file-locking
我的问题是这样的:我正在使用 aWatchService来获取有关特定文件夹中新文件的通知,现在如果在所述文件夹中移动/复制或创建文件,则会触发事件并返回新文件的名称。现在的问题是,如果我尝试访问该文件并且该文件尚未完全存在(例如复制仍在进行中),则会引发异常。我尝试做的是这样的事情:
RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
FileChannel fc = raf.getChannel();
FileLock lck = fc.lock();
Run Code Online (Sandbox Code Playgroud)
但即使获得了锁,如果我尝试写入文件,有时仍然会引发异常,因为另一个进程仍然有一个打开的句柄。
现在,如何锁定 Java 中的文件以实现真正的独占访问?
对我来说,声明
RandomAccessFile raf = new RandomAccessFile(fileName, "rw");
Run Code Online (Sandbox Code Playgroud)
如果我无法获取文件的锁,则返回 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;
}
Run Code Online (Sandbox Code Playgroud)
您可以循环运行它并等待,直到获得文件的锁定。不就行了
FileChannel fc = raf.getChannel();
Run Code Online (Sandbox Code Playgroud)
如果文件被锁定,永远不会到达?你会得到一个 FileNotFoundException 抛出..
| 归档时间: |
|
| 查看次数: |
7174 次 |
| 最近记录: |