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!

Qui JSch version utilisez-vous? L'un lié par André dispose de différents numéros de ligne (par exemple, pas throwStatusError en ligne 1750).
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