1

我编写了一个程序,可以监视文件夹并让我知道这些文件夹中的更改。但这应该整天运行,直到系统打开。这应该作为后台任务运行(如批处理)。
我正在使用 Java WatchService 来监视文件夹。
我需要一些建议,

  1. 如何使它成为作为批处理在后台运行的服务?
  2. 如果我把它作为服务,这会影响系统的性能吗?因为文件夹中至少每 5 分钟会添加一次文件。

请提出你的想法。

谢谢

4

3 回答 3

3

当您的系统有足够的资源时,您可以并且它不应该影响您的系统性能。

在java中执行此操作的步骤

  1. 编写一个小型 java 类FolderMonitor来监视特定文件夹。
    1. 加载目录File("C:\folder1")
    2. 迭代所有文件并将其最后修改时间保存在Map 映射键中,可以是 foderName+fileName,值是修改时间。
    3. 检查最后一次迭代值,如果发现修改或添加新文件,请处理您需要的内容。
    4. ScheduledExecutorService以所需的时间间隔运行上述程序
  2. FolderMonitor把课堂变成罐子。

让它服务

  1. 您可以使用apache's procruntanukisoftware服务包装器从 java 可执行 jar 创建服务
    1. 链接Java 服务包装器Apache Procrun

希望你能做到。祝一切顺利

于 2012-11-05T09:57:26.357 回答
3

Q> 如何将其作为一个服务在后台作为批处理运行?
A> 看到这个SO 帖子,它解决了同样的问题。

Q> 如果我把它作为服务,这会影响系统的性能吗?因为文件夹中至少每 5 分钟会添加一次文件。
A> 因为你正在使用WatchService,这应该是非常便宜的。引用文档

大多数文件系统实现都对文件更改通知提供本机支持。Watch Service API 在可用的情况下利用此支持。但是,当文件系统不支持这种机制时,Watch Service 会轮询文件系统,等待事件。

如果有疑问,您可以随时监控您的服务器并查看您的应用程序使用了多少 CPU 和 I/O。我敢打赌这不会很多。

于 2012-11-09T21:50:50.263 回答
0

制作一个无限循环的线程,比如

while(true) {
   //code and logic
   Thread.sleep(theTimeYouWantBetweenTheScans);
}

创建一个 .bat 文件以方便使用,例如 java -jar myMonitor.jar

性能取决于您的代码,但它不应该很重。享受。

于 2012-11-05T09:31:52.497 回答