【问题标题】:How to monitor folders using a service如何使用服务监视文件夹
【发布时间】:2012-11-05 07:01:26
【问题描述】:

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

  1. 如何将其作为在后台作为批处理运行的服务 过程?
  2. 如果我将此作为服务,这是否会影响性能 系统?因为至少每 5 分钟会添加一个文件 文件夹。

请提出你的想法。

谢谢

【问题讨论】:

  • 您将服务描述为批处理,所以我猜您正在寻找 Windows 解决方案?

标签: java filesystemwatcher


【解决方案1】:

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

在 java 中执行此操作的步骤

  1. 写一个小的java类FolderMonitor来监控一个特定的文件夹。
    1. 加载目录File("C:\folder1")
    2. 迭代所有文件并将其最后修改时间保存在Map map key 可以是 foderName+fileName,value 是修改时间。
    3. 检查上次迭代值,如果发现已修改或添加新文件,请处理您需要的内容。
    4. 通过ScheduledExecutorService 以所需的时间间隔运行上述代码
  2. FolderMonitor 类放入jar。

让它服务

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

希望你能做到。万事如意

【讨论】:

    【解决方案2】:

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

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

    大多数文件系统实现都具有对文件更改的本机支持 通知。 Watch Service API 利用了这种支持 在可用的地方。但是,当文件系统不支持此 机制,Watch Service 将轮询文件系统,等待事件。

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

    【讨论】:

      【解决方案3】:

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

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

      创建一个 .bat 文件以方便使用 java -jar myMonitor.jar 等内容

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        • 1970-01-01
        • 2012-10-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多