2011-10-13 93 views
1

我最近实现了Java 7的WatchService,它的工作原理非常完美。现在我想知道是否有办法让我的程序上次运行后发生的所有事件。例如:java未运行时的Java监视器文件系统

  1. 我跑我的程序,创建一些文件,编辑一些文件和我得到的所有相应的活动
  2. 我闭上程序
  3. 我创建一个文件名为foo.txt
  4. 我开始我的程序,第一个事件我得到的是一个ENTRY_CREATEfoo.txt

我想过节省lastModifiedDate和搜索文件和directorys不止t更新他上次执行我的程序。是否有另一种(更好的)方法来做到这一点?

回答

2

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

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

1

在Java或任何其他编程语言中无法做到这一点。

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

+0

是的,这很明显,而不是我的问题,我希望Java有一个解决方法实施的地方(如lastmodifiedDate解决方案或什么的) – Simiil

0

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

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