我的目标是轮询 SFTP 服务器以进行更改。我的第一个想法是检查目录中的文件数量是否发生了变化。然后可能对目录中的更改进行一些额外的检查。
目前我正在使用以下内容:
try {
FileSystemOptions opts = new FileSystemOptions();
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, true);
SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 60000);
FileSystemManager manager = VFS.getManager();
FileObject remoteFile = manager.resolveFile(SFTP_URL, opts);
FileObject[] fileObjects = remoteFile.getChildren();
System.out.println(DateTime.now() + " --> total number of files: " + Objects.length);
for (FileObject fileObject : fileObjects) {
if (fileObject.getName().getBaseName().startsWith("zzzz")) {
System.out.println("found one: " + Object.getName().getBaseName());
}
}
} catch (Exception e) {
e.printStackTrace();
}
这是使用 apache commons vfs2 2.2.0。它工作“很好”,但是当服务器有太多文件时,只需要几分钟才能获得计数(目前,获得大约 10k 文件的服务器的计数需要 2 分钟以上)。有什么方法可以更快地获得服务器上的计数或其他更改?