当前位置: 首页 > 知识库问答 >
问题:

如何实现文件监视程序来监视多个目录

隗嘉歆
2023-03-14

我需要监视多个文件夹以获取新文件通知。我尝试了一个目录,它工作得很好
我的文件夹结构类似于路径。获取(“c:\users\Test”);路径path1=路径。获取(“c:\users\test1”);路径路径2=路径。获取(“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();
        }

    }

我尝试将每个目录注册到watcher。WatchKey key1=路径1。注册(观察者、条目和创建);WatchKey key2=路径2。注册(观察者、条目和创建);我想在程序启动时监视多个文件夹中的传入事件。并行监视文件夹,直到我停止程序。如何实施?

提前谢谢。请帮忙,请帮忙

共有2个答案

太叔天宇
2023-03-14

如果要监视多个文件夹,我认为一个好的解决方案将是使用多线程程序,每个线程将监视一个文件夹。

匡旭东
2023-03-14
while (true) {
  ....
}

因为您有一个无限循环,一旦调用watchOutBoundDirectory静态函数。除非禁用监视程序,否则它将永远不会脱离范围。

因此,要么为每个路径使用多线程,要么传递一个路径数组来watchOutBoundDirectory,并检查同时(true)范围内的每个路径。

 类似资料:
  • 问题内容: 有谁知道如何设置可触发PMU通过以下方式监视多个(类型)事件的结构? 像一样,它具有两种不同的事件类型(PERF_TYPE_HARDWARE和PERF_TYPE_SOFTWARE),但是在perf_event_open的联机帮助页上的示例中,只能分配单个值。 任何建议将不胜感激,谢谢! 20170208更新 感谢@gudok为我指明方向,但结果似乎有些异常。如下所示的演示程序(用于测量

  • 问题内容: 我正在使用God(一个Ruby gem)监视我的Redis服务器。但是,我现有的服务器可能已经有一个redis up实例。如何确定它监视已经启动的 现有Redis服务器 进程? 这是我的上帝文件,用于redis: 问题答案: 要回答这个问题: 我在我的God文件中放入了w.pid_file =“ SOMETHING”,并确保在Redis的配置文件中也设置了此PID文件。

  • 问题内容: 我只能通过FTP访问远程服务器上的目录,并且希望在目录中出现新文件后立即获取它们。 是否有FAM for Python之类的东西可以让我通过FTP监视新文件? 问题答案: 如果轮询服务器是一种选择:

  • 本文向大家介绍node.js 如何监视文件变化,包括了node.js 如何监视文件变化的使用技巧和注意事项,需要的朋友参考一下 fs.FSWatcher fs.FSWatcher类 继承了 EventEmitter,用于监视文件变化,调用 fs.watch 后返回一个 fs.FSWatcher 实例,每当指定监视的文件被修改时,实例会触发事件调用回调函数 fs.watch() fs.watch(f

  • 问题内容: 我想在目录中监视来自C应用程序的新文件。但是,我对修改后的文件不感兴趣,仅对新文件感兴趣。目前,我为此目的使用readdir / stat: 知道如何在不保留文件列表的情况下检测 Linux和Solaris 10 上新创建的文件吗? 问题答案: 解决方案是将最后访问时间存储在全局变量中,并使用过滤器选择最新文件: : 统计信息(由路径扩展,但这仅是详细信息) 统计信息(由路径扩展,但这

  • 在使用监视器的餐饮哲学家实现中,为什么提出()操作两次调用test()操作?