在 Windows Vista 上使用 Java,我正在尝试为目录创建一种监视器,因此每次修改此目录(新、重命名、更新或删除文件)时都会触发一个进程。我尝试使用一个循环来执行此操作,该循环将dir
在目录中执行 a 并分析所有文件。但这非常耗费时间和内存,特别是当文件数量开始增长时。我认为应该有更好的方法来做到这一点。
注意:在 SO 中有一个类似的问题,但它是针对 C# 的。
我认为应该有更好的方法来做到这一点。
你说得对,Java 7 应该有更好的方法。请参阅即将推出的WatchService API。
如果没有 RC 构建,我不知道是否有一种可移植的方式来执行您所描述的操作。
如果您等不及 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
}
你到底在监控什么?我希望您只需要监视目录的修改时间,然后如果目录已被修改,则检查文件的修改时间。
所以我希望存储一个Map
文件名与修改时间(至少用于检查)。
不幸的是,除了以某种容量轮询目录之外,没有一种简单的方法可以使用 Java 检查目录的更改。请参阅我以前的答案。这个问题和你可以用来简化它的库(加上 Java 7 特性)
您可能需要使用 JNI 来调用 ReadDirectoryChangesW。您可以改用 FirstFirstChangeNotification 和 FindNextChangeNotification,但除非您需要与旧(16 位)版本的 Windows 兼容,否则我建议您不要这样做。