我使用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");看起来不对我.
请帮忙提出建议,谢谢!
关于你的观点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示例了吗?
| 归档时间: |
|
| 查看次数: |
43860 次 |
| 最近记录: |