我正在使用java.nio
WatchService
来监视文件系统的更改(对于webapp syncing project)。
但是,当我清理受监视的目录时,出现一个文件正在使用的问题(实际上,我正在使用maven进行清理,而maven提示它无法清理所有内容)。这意味着WatchService会以某种方式锁定受监视的资源。
如何查看目录而不进行任何锁定/禁止删除?
最佳答案
我已经为此目的长期使用Apache Commons VFS2,而在任何操作系统中都没有任何问题。基本上,您需要一个类来实现FileListener
接口(interface),该接口(interface)可让您在从目录添加/更新/删除文件时执行操作:
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
然后,您需要启动该文件监听器的监视器。在这里,您有一个未经测试的代码片段:
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);
}
}
希望对您有所帮助!
关于java - WatchService锁定了一些文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20017861/