我需要监控多个文件夹以获取新文件通知。我试过单个目录它的工作正常。
我的文件夹结构看起来像是
路径路径= Paths.get(“c:\ users \ Test”);
Path path1 = Paths.get(“c:\ users \ test1”);
Path path2 = Paths.get(“c:\ users \ test2”);
public static void watchOutBoundDirectory(Path path) {
String newFile = null;
try {
Boolean isFolder = (Boolean) Files.getAttribute(path, "basic:isDirectory", NOFOLLOW_LINKS);
if (!isFolder) {
throw new IllegalArgumentException("Path: " + path + " is not a folder");
}
} catch (IOException ioe) {
// Folder does not exists
ioe.printStackTrace();
}
// We obtain the file system of the Path
FileSystem fs = path.getFileSystem();
try (WatchService service = fs.newWatchService()) {
path.register(service, ENTRY_CREATE);
WatchKey key = null;
while (true) {
key = service.take();
Kind<?> kind = null;
for (WatchEvent<?> watchEvent : key.pollEvents()) {
kind = watchEvent.kind();
if (OVERFLOW == kind) {
continue;
} else if (ENTRY_CREATE == kind) {
Path newPath = ((WatchEvent<Path>) watchEvent).context();
Path fullPath = path.resolve(newPath);
String newFile = fullPath.toString();
}
}
if (!key.reset()) {
break; // loop
}
}
} catch (IOException ioe) {
ioe.printStackTrace();
} catch (InterruptedException ie) {
ie.printStackTrace();
}
}
我尝试将每个目录注册到观察者。 WatchKey key1 = path1.register(watcher,ENTRY_CREATE); WatchKey key2 = path2.register(watcher,ENTRY_CREATE); 我想在程序启动时监视多个文件夹中的传入事件。平行监视文件夹,直到我停止程序。如何实施?
提前致谢。请帮忙 请帮忙
答案 0 :(得分:1)
while (true) {
....
}
由于你有一个无限循环,一旦你调用了watchOutBoundDirectory静态函数。除非你禁用观察者,否则它永远不会逃避范围。
因此,要么为每个路径使用多线程,要么将路径数组传递给watchOutBoundDirectory并检查while(true)范围内的每个路径。
答案 1 :(得分:0)
如果你想监控多个文件夹,我认为一个好的解决方案是使用多线程程序,每个线程都会监控一个文件夹。