WatchService锁定了一些文件?

Boz*_*zho 5 java nio

我一直java.nio WatchService在监视文件系统的更改(对于webapp同步项目)。

但是,当我清理受监视的目录时,出现一个文件正在使用的问题(实际上,我正在使用maven进行清理,而maven抱怨它无法清理所有内容)。这意味着WatchService会以某种方式锁定被监视的资源。

如何查看目录而不进行任何锁定/禁止删除?

hve*_*iga 1

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

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;
}
Run Code Online (Sandbox Code Playgroud)

更多信息:链接到 FileListener

然后您需要启动该文件侦听器的监视器。这里有一个关于如何执行此操作的未经测试的片段:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助!