如何使用服务监视文件夹

时间:2012-11-05 07:01:27

标签: java filesystemwatcher

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

  1. 如何将此作为批处理在后台运行的服务 过程
  2. 如果我将其作为服务,这将影响性能 系统?因为至少每隔5分钟就会添加一些文件 文件夹。
  3. 请提出您的想法。

    由于

3 个答案:

答案 0 :(得分:3)

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

在java中执行此操作的步骤

  1. 编写一个小型java类FolderMonitor来监视特定文件夹。
    1. 加载目录File("C:\folder1")
    2. 迭代所有文件并在Map中保留其上次修改时间 map键可以是foderName + fileName,值是修改时间。
    3. 检查上一次迭代值,如果发现已修改或添加了新文件,则会处理您需要的内容。
    4. 按要求的时间间隔运行上述至ScheduledExecutorService
  2. FolderMonitor课程变成一个罐子。
  3. 提供服务

    1. 您可以使用apache's procruntanukisoftware服务包装器从java可执行jar创建服务
      1. 链接Java Service wrapper& Apache Procrun
    2. 希望你能做到。一切顺利

答案 1 :(得分:3)

Q>如何将此作为批处理在后台运行的服务? A>请参阅this SO帖子,它解决了同样的问题。

Q>如果我将其作为服务,这会影响系统的性能吗?因为文件夹中至少每5分钟会添加一次文件。
A>因为您使用的是WatchService,所以这应该非常便宜。引用the documentation

  

大多数文件系统实现都支持文件更改   通知。 Watch Service API利用此支持   在哪里可用。但是,当文件系统不支持此功能时   机制,Watch Service将轮询文件系统,等待事件。

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

答案 2 :(得分:0)

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

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

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

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