La récupération de données à partir d'un serveur SFTP en utilisant JSch
Je suis en utilisant JSch pour récupérer un fichier à partir d'un ordinateur distant par SFTP. Voici le code
public class TestSFTPinJava {
public static void main(String args[]) {
JSch jsch = new JSch();
Session session = null;
try {
session = jsch.getSession("username", "sftp.abc.com", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("password");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
System.out.println("Directory:" + sftpChannel.pwd());
sftpChannel.cd("remoteDirectory/");
System.out.println("Directory after cd:" + sftpChannel.pwd());
sftpChannel.get("remote-data.txt");
sftpChannel.put("C:\\Users\\mona\\Documents\\local-copy.txt");
sftpChannel.exit();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
}
}
Maintenant, j'ai deux questions:
-
sftpChannel.get("remote-data.txt");
déclenche une exception:aucun fichier
au com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2297)
au com.jcraft.jsch.ChannelSftp._stat(ChannelSftp.java:1750)
au com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1020)
au com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:995)
au TestSFTPinJava.principale(TestSFTPinJava.java:29) -
Je ne suis pas sûr de la façon de spécifier l'emplacement dans mon système local où le fichier sera enregistré.
sftpChannel.put("C:\\Users\\mona\\Documents\\localCopy.txt");
ne regarde pas le droit de me.
S'il vous plaît aider avec des suggestions, Merci!
jsch-0.1.44 est le JSch version. Je ne suis pas sûr pourquoi sftpChannel.get("remote-data.txt"); est en train de jeter un no such file d'exception. Voulez-vous suggérer quelque chose?
C'est principalement de trouver la bonne ligne dans le source correspondant à votre stacktrace. Notre 1750 correspond à ligne de 1741 à la grepcode version.
Le serveur est de retour le message d'erreur "no such file" :-/
J'ai juste couru votre programme (en remplacement du nom d'utilisateur, mot de passe et le serveur par le mien, et
sftpChannel.get("remote-data.txt");
par sftpChannel.get("remote-data.txt", "downloaded-data.txt");
, et il a bien fonctionné.
OriginalL'auteur mona | 2011-08-24
Vous devez vous connecter pour publier un commentaire.
Concernant votre point 1, je soupçonne que le répertoire par défaut après la connexion n'est pas ce que vous attendez. Essayez d'utiliser un absolu chemin d'accès à distance. Ne
sftpChannel.pwd()
retour le répertoire le fichierremote-data.txt
est sur la machine distante ?Concernant votre point 2, en regardant http://grepcode.com/file/repo1.maven.org/maven2/com.jcraft/jsch/0.1.42/com/jcraft/jsch/ChannelSftp.java#290 on voit qu'il y a la méthode suivante dans
ChannelSftp
:qui a, en effet, une source et une destination argument de nom de fichier.
Je suppose qu'on avait déjà un aperçu de la Jsch sftp exemple à http://www.jcraft.com/jsch/examples/Sftp.java ?
et si vous utilisez le chemin d'accès absolu avec
get
?Aucun travail n'est pas en utilisant le chemin d'accès absolu de la obtenir. Aussi, j'ai édité mes codes dans la question d'inclure la modification. Ça en jette toujours la même exception.S'il vous plaît suggérer !
Pourrait-il être un problème de permission ? Vous pouvez obtenir le fichier avec une autre (de ligne de commande / graphique ) client sftp programme ?
Oui je peux le faire à l'aide de graphiques sftp client! DONC, il n'est pas problème de permission
OriginalL'auteur Andre Holzner
Exemple Simple d'application.
J'ai récupérer le fichier à partir du serveur distant (à partir de /tmp/qtmp) et de l'enregistrer dans l'ordinateur local dans le chemin d'accès actuel
OriginalL'auteur Vladimir Azarov
j'ai eu un problème similaire, j'ai essayé d'obtenir certains fichiers à partir d'un serveur où tout était bien, mais j'étais toujours cette erreur:
J'ai été d'inscription correctement tous les éléments du répertoire à l'aide
Je pense que c'était confus que moi, que j'étais capable de lire le contenu du répertoire à l'aide de la commande ls, lorsque vous souhaitez obtenir /mettre des fichiers assurez-vous que vous vous déplacez d'abord par l'aide de la commande "cd".
La solution a été d'utiliser la commande suivante pour déplacer vers le répertoire qui contient mes fichiers à l'aide d'une simple commande de cd:
Espère que cette aide, j'ai pris mes parfois pour le comprendre. jojo.
Leçons apprises:
1.- ls peut lire n'importe quel répertoire, peu importe si vous n'êtes pas à l'intérieur.
2.- Pour obtenir et mettre les fichiers assurez-vous toujours que vous êtes dans le répertoire qui contient les fichiers à l'aide de cd.
OriginalL'auteur Israelm