在 Java 中监听 File(文件或目录)变化,常见有 三种方式,从简单到专业依次如下:
WatchService(最常用 ✅)适合:监听目录变化(新增、修改、删除)
import java.nio.file.*;
public class WatchDemo {
public static void main(String[] args) throws Exception {
Path path = Paths.get("D:/test");
WatchService watchService = FileSystems.getDefault().newWatchService();
path.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_MODIFY,
StandardWatchEventKinds.ENTRY_DELETE);
while (true) {
WatchKey key = watchService.take();
for (WatchEvent<?> event : key.pollEvents()) {
System.out.println(event.kind() + " : " + event.context());
}
key.reset();
}
}
}
适合:监听单个文件内容变化
File file = new File("D:/test/a.txt");
long lastModified = file.lastModified();
while (true) {
if (file.lastModified() != lastModified) {
System.out.println("文件发生变化");
lastModified = file.lastModified();
}
Thread.sleep(1000);
}
FileAlterationObserver observer =
new FileAlterationObserver("D:/test");
FileAlterationMonitor monitor =
new FileAlterationMonitor(1000);
observer.addListener(new FileAlterationListenerAdaptor() {
@Override
public void onFileChange(File file) {
System.out.println("文件修改:" + file);
}
});
monitor.addObserver(observer);
monitor.start();
WatchMonitor.createAll(
"D:/test",
WatchMonitor.ENTRY_MODIFY
).setWatcher((action, file) -> {
System.out.println(file + " 变化");
}).start();
| 方案 | 实时性 | 是否支持单文件 | 推荐度 |
|---|---|---|---|
| WatchService | 中 | ❌(目录) | ⭐⭐⭐⭐ |
| 轮询 | 低 | ✅ | ⭐⭐ |
| Commons IO | 高 | ✅ | ⭐⭐⭐⭐⭐ |
| Hutool | 高 | ✅ | ⭐⭐⭐⭐⭐ |
WatchService如果你告诉我:
我可以给你最合适的完整代码。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。