Java未运行时的Java监视器文件系统

时间:2011-10-13 11:39:39

标签: java filesystemwatcher java-7

我最近实现了Java 7的WatchService,它运行良好。现在我想知道是否有办法获得自上次运行程序以来发生的所有事件。例如:

  1. 我运行程序,创建一些文件,编辑一些文件,然后获得所有相应的事件
  2. 我关闭了我的程序
  3. 我创建了一个名为foo.txt
  4. 的文件
  5. 我启动了我的程序,我得到的第一个事件是ENTRY_CREATE foo.txt
  6. 我考虑过保存lastModifiedDate并搜索比上次执行程序更新的文件和directorys。还有另一种(更好的)方法吗?

3 个答案:

答案 0 :(得分:2)

如果您的程序要扫描所有文件更改(除了将文件存储在内容/源代码控制存储库中,但这可能是您的程序外部),没有更好的方法可以执行此操作)。

Java 7的WatchService只是比连续循环和比较文件日期/文件夹内容更高效的方式,因此您需要实现自己的逻辑来解决自己的问题。

答案 1 :(得分:1)

无法用Java或任何其他编程语言执行此操作。

操作系统不会(也不能)缓存文件系统事件,因为有人可能会启动程序来处理它们。事件监视器/传递系统捕获正在侦听它们的正在运行的应用程序的事件。当什么都没有收听时,事件就不会被捕获。

答案 2 :(得分:0)

您可以编写一个小型守护程序(Windows上的系统服务),它持续运行并侦听文件系统更改。它可以将这些写入文件。当您的应用程序运行时,而不是自己监听更改,它只能读取文件。当事件在运行时发生,守护进程将继续接收它们并通过该文件将它们发送到应用程序。

您需要确保文件的组织方式可以同时安全地写入和读取文件,并且文件无法无限增长。