首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WatchService锁定了一些文件?

WatchService锁定了一些文件?
EN

Stack Overflow用户
提问于 2013-11-16 19:28:10
回答 2查看 1.9K关注 0票数 5

我正在使用java.nio WatchService监视文件系统的更改(对于webapp syncing project)。

然而,当我清理被监视的目录时,我得到一个正在使用的文件的问题(实际上,我是用maven清理的,maven抱怨它不能清理所有的文件)。这意味着WatchService以某种方式锁定了被监视的资源。

如何在不加锁/不允许删除的情况下查看目录?

EN

回答 2

Stack Overflow用户

发布于 2013-11-16 23:09:48

为此,我已经使用Apache Commons VFS2很长一段时间了,在任何操作系统上都没有任何问题。基本上,您需要一个类来实现FileListener接口,该接口允许您在添加/更新/删除目录中的文件时执行操作:

代码语言:javascript
复制
public interface FileListener {
    /**
     * Called when a file is created.
     */
    void fileCreated(FileChangeEvent event) throws Exception;

    /**
     * Called when a file is deleted.
     */
    void fileDeleted(FileChangeEvent event) throws Exception;

    /**
     * Called when a file is changed.
     */
    void fileChanged(FileChangeEvent event) throws Exception;
}

更多信息:Link to FileListener

然后,您需要启动该文件侦听器的监视器。这里有一个关于如何做到这一点的未经测试的代码片段:

代码语言:javascript
复制
private void startMonitor() {
    Logger logger = LogManager.getLogger(MyClass.class);
    try {
        FileSystemManager fileSystemManager = VFS.getManager();
        FileObject dirToWatchFO = null;
        String path = "dir/you/want/to/watch";

        File pathFile = new File(path);
        path = pathFile.getAbsolutePath();
        dirToWatchFO = fileSystemManager.resolveFile(path);

        DefaultFileMonitor fileMonitor = new DefaultFileMonitor(new MyFancyFileListener());
        fileMonitor.setRecursive(false);
        fileMonitor.addFile(dirToWatchFO);
        fileMonitor.start();
    } catch (FileSystemException e) {
        logger.error("SOMETHING WENT WRONG!!", e);
    }
}

我希望它能有所帮助!

票数 1
EN

Stack Overflow用户

发布于 2014-02-06 07:55:21

如果您希望能够在监视条目的同时将其删除,则应将监视器添加到下一个目录中。然后它将锁定该目录,但如果您对一个永远不会被删除的目录执行此操作,这将不会是一个问题。

有时,这会引发这样的问题:“如果我想知道树下更多的变化,该怎么办?”如果您在Windows上使用Sun,您可以使用修饰符ExtendedWatchEventModifier.FILE_TREE,它将监视文件树中的所有修改,而不仅仅是直接的子项。我不知道其他平台是否支持这个修饰符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20017861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档