【问题标题】:FileSystemWatcher in Java - Deleting a directory being watchedJava 中的 FileSystemWatcher - 删除正在监视的目录
【发布时间】:2011-11-15 16:14:30
【问题描述】:

我已经实现了一个文件系统观察器。每当我尝试删除监视目录时,它都会为该目录中的所有文件或子目录生成ENTRY_MODIFY 事件。有什么办法可以找到被监视目录的删除命令?我不想查看父目录,因为这样所有其他文件和文件夹也将被监视更改。

【问题讨论】:

  • 没有一些代码,我们都在猜测。请展示你所做的,编辑到最小的SSCCE
  • public void registerWithWatchService(String path) {dirpath = path;路径 dir = Paths.get(path);try { WatchKey key = dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE,ENTRY_MODIFY);} catch (IOException x) {} public void processEvents() { while (true) { WatchKey key;尝试 { 键 = watcher.take(); } 捕捉 (InterruptedException x) { 返回; } for (WatchEvent> 事件 : key.pollEvents()) { WatchEvent.Kind> kind = event.kind();WatchEvent ev = (WatchEvent) 事件;路径文件名 = ev.context();路径 dir = (Path)key.watchable();路径}}

标签: java directory filesystemwatcher


【解决方案1】:

也许您可以使用像 Apache Commons VFS 或 org.apache.commons.io.monitor 这样的库来提供这样的功能。无论如何,我认为您必须监视您感兴趣的目录的父目录。

这是一个小(未经测试!)示例:

File directory = new File("c:/your/parent/dir"));
FileAlterationObserver observer = new FileAlterationObserver(directory);
observer.addListener(new FileAlterationListener() {

    // here you have to implement some methods, this is the pertinent one for you: 
    public void onDirectoryDelete(File directory) {
        // do your processing here
    }
});

FileAlterationMonitor monitor = new FileAlterationMonitor(interval);
monitor.addObserver(observer);
monitor.start();

【讨论】:

    猜你喜欢
    • 2013-01-18
    • 1970-01-01
    • 2015-05-24
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-08
    相关资源
    最近更新 更多