我的目標是輪詢SFTP服務器的更改。我的第一個想法是檢查dir文件的數量是否發生了變化。然後,可能需要額外檢查目錄中的更改。是否有一種簡單的方法來檢查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的百科全書VFS2 2.2.0。它工作「很好」,但是當服務器文件太多時,只需要幾分鐘就可以獲得計數(目前,需要2分鐘才能獲得具有〜10k文件的服務器的計數)。任何方式來更快地獲得服務器上的計數或其他更改?
你需要過濾文件嗎?或者只是數一數。 – Dezigo
@Dezigo我的目標是輪詢sftp服務器,並在發生變化時做出反應。所以理想情況下,我認爲第一種方法是檢查該目錄中的文件數量。也許你可以提出更好的檢查方法? – iCodeLikeImDrunk