在java中,如何查看多个目录
我想监视多个文件夹是否在文件夹中添加了新文件。 如果文件添加到文件夹中,我想获取文件的名称。 如何做到这一点。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我想监视多个文件夹是否在文件夹中添加了新文件。 如果文件添加到文件夹中,我想获取文件的名称。 如何做到这一点。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
有一个名为 apache commons 中的 >文件监视器 IO 库。我想这正是您正在寻找的。
Theres a component called File Monitor in the apache commons IO library. I Think it's just what you're looking for.
请尝试这个,
please try this ,
我比较了 Java WatchService 和 commons-io FileAlterationMonitor。
正如本教程中已经写的那样,WatchService 不需要轮询。它可以阻塞线程直到事件可用。
另一方面,FileAlterationMonitor 使用线程进行轮询,并在需要时通知所有已注册的侦听器。
从上面可以得出结论,使用 WatchService 性能更高。然而,性能是特定于实现的。作为 文档说,对于不提供基于事件的通知的平台,可以实施轮询。因此,WatchService 的性能有可能更高,但随着我们转向所有支持事件的现代文件系统,这种机会就会越来越大。
WatchService 还有另一个警告:它会准确监视您注册的路径。没有递归操作。虽然您现在可以注册创建的所有子目录来监视它们,但 WatchService 发出的 WatchEvent 仅携带相对路径。这样您就不会知道您正在观看的几个目录中的哪一个真正产生了该事件。
commons-io 解决方案并非如此。由于它将更改作为 java.io.File 对象进行通信,因此每个事件都包含完整路径。更重要的是,一旦您查看目录,子文件夹中的更改也会被检测到,而无需额外的努力。
由此决定何时使用可能的内容:
I compared the two different approaches of the Java WatchService and commons-io FileAlterationMonitor.
As it is written already in this tutorial, the WatchService does not require polling. It can block a thread until events are available.
On the other hand the FileAlterationMonitor uses a thread for polling and if needed notifies all registered listeners.
From the above one could conclude that using the WatchService is more performant. However the performance is implementation specific. As the documentation says for platforms that do not offer event based notification a polling may be implemented. So there is just a chance that WatchService is more performant, but as we move to modern filesystms which all support events the chances are growing.
There is another caveat with WatchService: it watches exactly the path you register for. There is no recursive operation. While you could now register all the subdirectories that get created to watch them too, the WatchEvent emitted by the WatchService only carries a relative path. With that you would not know which of the several directories you are watching actually produced the event.
Not so the commons-io solution. As that communicates the changes as java.io.File objects, each of the events contains the full path. Even more, once you watch a directory, also changes in subfolders are detected without additional effort.
With that the decision when to use what might be: