J'essaie de sortir le dernier fichier d'un répertoire, qui se trouve sur un serveur sftp. La façon dont je le fais droit est plus ou moins maintenant:Apache vfs: récupère le dernier fichier modifié d'un répertoire (sftp)
public FileObject getLatestFile(String directory) throws FileSystemException {
FileObject fo = fsManager.resolveFile(this.host+directory, fsOptions);
FileObject latestFile = null;
long max = 0;
fo.getContent().
for (FileObject fob : fo.getChildren()){
if (fob.getContent().getLastModifiedTime() > max) {
max = fob.getContent().getLastModifiedTime();
latestFile = fob;
}
}
return latestFile;
}
Le problème avec cette approche est que je télécharge essentiellement tous les fichiers dans le répertoire donné, chaque fois que la méthode est appelée.
Y a-t-il une meilleure façon de faire cela?
cool, belle analyse. Encore le code est lent, ce qui me fait deviner que les allers-retours sont à blâmer. Merci. –
Si vous regardez dans SftpFileObject.doListChildrenResolved, chaque enfant a ses attributs remplis au moment de la création: ((SftpFileObject) FileObjectUtils.getAbstractFileObject (fo)). SetStat (stat.getAttrs()); Nous pouvons donc exclure la possibilité de récupérer des attributs de fichier par item (la commande sfpt ls l'obtient déjà). Il serait intéressant de voir pourquoi il est lent, peut-être que vous pouvez faire un tcpdump/Wireshark (outils Linux) pour voir si faire des connexions supplémentaires. –