我最近实现了Java 7的WatchService,它运行良好。现在我想知道是否有办法获得自上次运行程序以来发生的所有事件。例如:
foo.txt
ENTRY_CREATE
foo.txt
我考虑过保存lastModifiedDate
并搜索比上次执行程序更新的文件和directorys。还有另一种(更好的)方法吗?
答案 0 :(得分:2)
如果您的程序要扫描所有文件更改(除了将文件存储在内容/源代码控制存储库中,但这可能是您的程序外部),没有更好的方法可以执行此操作)。
Java 7的WatchService
只是比连续循环和比较文件日期/文件夹内容更高效的方式,因此您需要实现自己的逻辑来解决自己的问题。
答案 1 :(得分:1)
无法用Java或任何其他编程语言执行此操作。
操作系统不会(也不能)缓存文件系统事件,因为有人可能会启动程序来处理它们。事件监视器/传递系统捕获正在侦听它们的正在运行的应用程序的事件。当什么都没有收听时,事件就不会被捕获。
答案 2 :(得分:0)
您可以编写一个小型守护程序(Windows上的系统服务),它持续运行并侦听文件系统更改。它可以将这些写入文件。当您的应用程序运行时,而不是自己监听更改,它只能读取文件。当事件在运行时发生,守护进程将继续接收它们并通过该文件将它们发送到应用程序。
您需要确保文件的组织方式可以同时安全地写入和读取文件,并且文件无法无限增长。