如何为特定目录创建监视器?

时间:2009-10-09 14:39:15

标签: java windows directory monitor

在Windows Vista上使用Java,我正在尝试为目录创建一种监视器,因此每次修改此目录(新的,重命名的,更新的或删除的文件)时都会触发一个进程。我尝试使用一个循环来执行此操作,该循环将在目录中执行dir并分析所有文件。但这是时间和内存消耗,特别是当文件数量开始增长时。我认为应该有更好的方法来做到这一点。

注意:SO中有一个similar question,但它适用于C#。

4 个答案:

答案 0 :(得分:4)

  

我认为应该有更好的方法   这样做。

你是对的,应该有一种更好的方法,它应该是Java 7.请参阅即将发​​布的WatchService API

如果没有获得RC构建,我不知道是否有可行的方式来执行您所描述的内容。

答案 1 :(得分:3)

如果您不能等待Java 7和WatchService,则必须执行以下操作:

final File watched = new File("[path of directory to watch]");
long lastModified = watched.lastModified();
while(true) {
    if (watched.lastModified() > lastModified) {
        // Change happened in the directory do what you want.
    }
    Thread.sleep(2000); // 2 second interval
}

答案 2 :(得分:1)

你到底在监视什么?我希望您只需要监视目录的修改时间,然后检查文件的修改时间(如果目录已被修改)。

所以我希望存储Map个文件名与修改时间(至少用于检查)。

不幸的是,没有一个 easy 意味着使用Java来检查目录中的更改,而不是以某种身份轮询目录。见a previous answer of mine wrt。这个问题和库可以用来简化这个(加上Java 7特性)

答案 3 :(得分:1)

您可能需要使用JNI来调用ReadDirectoryChangesW。您可以使用FirstFirstChangeNotification和FindNextChangeNotification,但除非您需要与旧的(16位)Windows版本兼容,否则我建议不要使用它。