我有Java程序监视安装在本地服务器中的远程文件夹。但是,每当远程文件夹中的某些东西更改时,它都不会检测到任何更改/修改。
如果在安装的文件夹中进行更改/修改,则可以正常工作。
搜索网络,如Java Docs中的提及
如果观察文件未位于本地存储设备上,则 如果可以检测到文件的更改,请参见实现。在 特别是,不需要更改对文件进行的更改 检测到远程系统。
任何人都可以为我提供如何做到这一点的样本?以下是我当前的代码
WatchService watcher = FileSystems.getDefault().newWatchService();
Path dir = Paths.get(directory);
dir.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
while (true) {
WatchKey key;
try {
key = watcher.take();
} catch (Exception ex) {
return;
}
for (WatchEvent<?> event : key.pollEvents()) {
WatchEvent.Kind<?> kind = event.kind();
@SuppressWarnings("unchecked")
WatchEvent<Path> ev = (WatchEvent<Path>) event;
Path fileName = ev.context();
if (kind == ENTRY_MODIFY) {
System.out.println("file has changed");
// other process
}
if (kind == ENTRY_CREATE) {
System.out.println("file has created");
// other process
}
}
boolean valid = key.reset();
if (!valid) {
break;
}
}
我有相同的问题并使用了org.apache.commons.io.monitor.FileAlterationMonitor
。pom.xml如前所述如下所示,如下
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
用于使用的用法代码段如下:
String monitoringDirectory= "<YOUR CODE HERE>";
FileAlterationObserver observer = new FileAlterationObserver(monitorDirectory);
logger.info("Start ACTIVITY, Monitoring "+monitorDirectory);
observer.addListener(new FileAlterationListenerAdaptor(){
@Override
public void onDirectoryCreate(File file) {
logger.info("New Folder Created:"+file.getName());
}
@Override
public void onDirectoryDelete(File file) {
logger.info("Folder Deleted:"+file.getName());
}
@Override
public void onFileCreate(File file) {
logger.info("File Created:"+file.getName()+": YOUR ACTION");
}
@Override
public void onFileDelete(File file) {
logger.info("File Deleted:"+file.getName()+": NO ACTION");
}
});
/* Set to monitor changes for 500 ms */
FileAlterationMonitor monitor = new FileAlterationMonitor(500, observer);
try {
monitor.start();
} catch (Exception e) {
logger.error("UNABLE TO MONITOR SERVER" + e.getMessage());
e.printStackTrace();
}
我想,Oracle的手表服务未检测到远程事件 - 该服务适用于本地目录。
您必须使用-org.apache.commons.io.monitor.FileAlterationMonitor
API类 -
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
您应该使用该类Google搜索代码样本。