À l'aide de JSch ChannelSftp: Comment lire plusieurs fichiers avec dynamique des noms?
Je dois lire un tas de .Les fichiers CSV avec la dynamique des noms de fichiers à partir d'un serveur SFTP. Ces fichiers sont générés toutes les 15 minutes.
Je suis en utilisant JSch de ChannelSftp, mais il n'existe aucune méthode qui permettrait de donner l'exacte des noms de fichiers. Je ne vois qu'une .ls()
méthode. Cela donne un Vecteur par exemple
[drwxr-xr-x 2 2019 2019 144 Aug 9 22:29 .,
drwx------ 6 2019 2019 176 Aug 27 2009 ..,
-rw-r--r-- 1 2019 2019 121 Aug 9 21:03 data_task1_2011_TEST.csv,
-rw-r--r-- 1 2019 2019 121 Aug 9 20:57 data_task1_20110809210007.csv]
Est-il un moyen simple de lire tous les fichiers dans un répertoire et de les copier vers un autre emplacement?
Ce code fonctionne pour copier un seul fichier:
JSch jsch = new JSch();
session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp)channel;
channelSftp.cd(SFTPWORKINGDIR);
channelSftp.get("data_task1_20110809210007.csv","data_task1_20110809210007.csv");
Vous devez vous connecter pour publier un commentaire.
La
ls
méthode est celle dont vous avez besoin. Elle retourne un vecteur de LsEntry objets, chacun de qui vous pouvez poser des questions sur son nom.Donc, après votre
channelSftp.cd(SFTPWORKINGDIR);
, vous pouvez effectuer les opérations suivantes:(Ce qui suppose
destinationPath
est un répertoire local nom se terminant par/
(ou\
dans Windows).)Bien sûr, si vous ne voulez pas télécharger les fichiers à nouveau au bout de 15 minutes, vous pouvez avoir une liste des fichiers locaux, afin de les comparer (utiliser un HashSet ou similaire), ou de les supprimer du serveur.
jsch
dans mon observé les balises, et où le vérifier simplement en quelques minutes après que vous avez posté :-). Ravi de vous aider.wildcards (* or ?) [are] in the last component (i.e. after the last /)
Noter que
ls
est sensible à la casse. Cette méthode permet d'extraire tous les fichiers csv, quelle que soit l'extension de cas