查看更改目录Java.nio.file

时间:2014-04-15 17:10:03

标签: java file watchservice

我知道java.nio.file可以提供观看文件更改的方法,例如新文件,修改和删除。但现在我想知道是否有方法可以观察目录是否正在输入或某个应用程序如编辑器正在打开一个文件。

我已阅读过API文档,但却找不到实现此目的的方法。任何人都可以提供一些线索,可能是其他API文档,而不是java.nio.file可以提供解决此问题的方法。

1 个答案:

答案 0 :(得分:1)

查看http://docs.oracle.com/javase/7/docs/api/java/nio/file/WatchService.html

关于您可以关注的内容,请查看http://docs.oracle.com/javase/7/docs/api/java/nio/file/StandardWatchEventKinds.html

它看起来不支持"正在打开的文件"或者"有人进入目录"您在其他评论中表明了这一点。

这是一个简单观察者的样本:

package com.stackoverflow.answers;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

public class FolderWatcher {
    public static void main(String[] args) throws IOException, InterruptedException {
        WatchService watcher = FileSystems.getDefault().newWatchService();
        Path dir = FileSystems.getDefault().getPath("c:/Temp");
        dir.register(watcher, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_DELETE);
        // ...

        for (;;) {
            WatchKey key = watcher.take();
            for (WatchEvent<?> event : key.pollEvents()) {
                System.out.println("Got event: " + event.kind());
                if (event.kind() == StandardWatchEventKinds.OVERFLOW) continue;

                System.out.println("File: " + ((WatchEvent<Path>)event).context());
            }
        }
    }
}

有关更完整的处理,请查看本教程:http://docs.oracle.com/javase/tutorial/essential/io/notification.html