【发布时间】:2015-06-25 19:33:15
【问题描述】:
我的目标是轮询 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 分钟以上)。有什么方法可以更快地获取服务器上的计数或其他更改?
【问题讨论】:
-
您需要过滤文件吗?或者只是数一数。
-
@Dezigo 我的目标是轮询 sftp 服务器并在有变化时做出反应。所以理想情况下,我认为第一种方法是检查该目录中的文件数。也许您可以提出更好的检查方法?
标签: java sftp apache-commons-vfs