使用JSch从SFTP服务器检索数据

mon*_*ona 7 java sftp jsch

我使用JSch通过SFTP从远程机器检索文件.这是代码

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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我有两个问题:

  • sftpChannel.get("remote-data.txt"); 抛出异常:


    com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1750)
    中com.jcraft.jsch.ChannelSftp.get(ChannelSftp.java:1750)的com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2297)
    中没有此类文件(ChannelSftp. java:1020)
    在test.Fcraft.jsch.ChannelSftp.get(ChannelSftp.java:995)
    的TestSFTPinJava.main(TestSFTPinJava.java:29)

  • 我不知道如何在本地系统中指定保存文件的位置. sftpChannel.put("C:\\Users\\mona\\Documents\\localCopy.txt");看起来不对我.

请帮忙提出建议,谢谢!

And*_*ner 6

关于你的观点1,我怀疑连接后的默认目录不是你所期望的.尝试使用绝对远程路径.是否sftpChannel.pwd()返回remote-data.txt远程计算机上文件所在的目录?

关于你的观点2,看看http://grepcode.com/file/repo1.maven.org/maven2/com.jcraft/jsch/0.1.42/com/jcraft/jsch/ChannelSftp.java#290,看到那里是以下方法ChannelSftp:

 public void put(String src, String dst)
Run Code Online (Sandbox Code Playgroud)

它确实有源和目标文件名参数.

我想你已经看过http://www.jcraft.com/jsch/examples/Sftp.java上的Jsch sftp示例了吗?