gpt4 book ai didi

Java - 如何确定一个目录是否正在被另一个进程使用?

转载 作者:行者123 更新时间:2023-11-29 03:31:16 28 4
gpt4 key购买 nike

我想使用 java 7 的 WatchService 来监控目录的变化。
它似乎试图锁定文件夹,如果失败会抛出异常,但似乎没有提供任何预先锁定它/检查它是否已经被锁定的方法。

我需要知道一个目录当前是否正在被另一个进程使用。因为我无法锁定它或打开它的流(因为它是一个目录),所以我正在寻找比尝试修改它并在失败时 hibernate 或 try/catch with sleep 更智能的东西。

理想情况下,我希望在可用之前阻止调用。

编辑:我似乎无法在文件夹上获取 FileLock。当我尝试锁定文件夹时,出现“FileNotFoundException(访问被拒绝)”。谷歌搜索表明您不能在目录中使用该对象。

注册码:

WatchService watchService = path.getFileSystem().newWatchService()
path.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE)

失败场景:
假设我正在收听文件夹 f 的新创建。
如果在里面创建了一个子文件夹g,我想监听g的变化。但是,如果我在 f(在 Windows 中)中创建一个新文件夹,这将失败,因为 Windows 会锁定该文件夹,直到给出一个名称。

谢谢

最佳答案

取自here

File file = new File(fileName);
FileChannel channel = new RandomAccessFile(file, "rw").getChannel();
// Get an exclusive lock on the whole file
FileLock lock = channel.lock();
try {
lock = channel.tryLock();
// Ok. You get the lock
} catch (OverlappingFileLockException e) {
// File is open by someone else
} finally {
lock.release();
}

关于Java - 如何确定一个目录是否正在被另一个进程使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18163603/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com