我有 Java 程序监视安装在本地服务器上的远程文件夹。但只要远程文件夹中的某些内容发生更改,它就不会检测到任何更改/修改。
如果在安装的文件夹中进行了更改/修改,则工作正常。
通过网络搜索,如 Java 文档中所述
如果监视的文件不在本地存储设备上,那么是否可以检测到文件的更改是实现特定的。特别是,不需要检测在远程系统上执行的文件更改。
任何人都可以帮助我提供有关如何执行此操作的示例?下面是我当前的代码
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我猜想,Oracle 的监视服务不会检测远程事件 - 该服务适用于本地目录。
你必须使用 - org.apache.commons.io.monitor.FileAlterationMonitorAPI 类 -
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
您应该在 google 上搜索使用该类的代码示例。
| 归档时间: |
|
| 查看次数: |
3876 次 |
| 最近记录: |