gpt4 book ai didi

java - 在 Java 中监视文件和目录更改

转载 作者:行者123 更新时间:2023-11-30 06:09:22 25 4
gpt4 key购买 nike

我在这里写信主要是为了获得有关从哪里开始的建议。我已经实现了一个类,该类将使用 Java 的 WatchService 递归地监视目录。它可以很好地检测更改,但我注意到一个致命缺陷:我无法删除正在监视的目录,其中包含正在监视的目录。这似乎是 WatchService 的一个限制。

我也稍微研究了一下 Apache 的 VFS FileListener,但在我再花 6 个小时左右的时间围绕它构建某种包装器之前,我想也许我应该问问那些比我更有知识的人。

我需要被监视的目录是完全可操作的,除了被监视的根目录不会被删除或重命名。是否已经存在我可以用来监视不锁定文件或文件夹的文件和目录的好类?我试图避免轮询/哈希比较方法,但我越来越觉得我需要使用这种方法并消耗大量 CPU 资源。我从哪里开始呢?理想情况下,我需要:

-检测文件和目录的创建-检测文件和目录的删除-检测文件和目录的重命名-检测文件修改-检测目录间文件的移动

我还看到一些建议观察者不可靠并且他们使用两者的组合(偶尔轮询以防观察者在某个地方失败),但是这听起来像是一个真正的痛苦,如果它的话我宁愿避免反正不是最好的方法。我觉得我需要轮询和散列,特别是因为我想检测文件的移动和重命名,但请告知是否存在更好的选择。

提前致谢,对于不太特定于代码的问题,我们深表歉意!

最佳答案

这将允许您尝试在 D:\Temp 下创建、删除、移动和重命名文件,并且应该让您了解您需要什么:

import static com.sun.nio.file.ExtendedWatchEventModifier.FILE_TREE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;

import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

public class Foo3
{
public static void main(String[] args) throws Exception
{
FileSystem fs = FileSystems.getDefault();
WatchService ws = fs.newWatchService();
Path pTemp = Paths.get("D:/Temp");
pTemp.register(ws, new WatchEvent.Kind[] {ENTRY_MODIFY, ENTRY_CREATE, ENTRY_DELETE}, FILE_TREE);
while(true)
{
WatchKey k = ws.take();
for (WatchEvent<?> e : k.pollEvents())
{
Object c = e.context();
System.out.printf("%s %d %s\n", e.kind(), e.count(), c);
}
k.reset();
}
}
}

关于java - 在 Java 中监视文件和目录更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38063436/

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