我想通过SFTP传输文件。我发现一个类似的问题,从how to transfer a file through SFTP in java?询问。我在本地主机上试用了推荐的解决方案。但在输出下面显示以下错误。通过SFTP传输文件
输出
preparing the host information for sftp.
Host connected.
sftp channel opened and connected.
2: No such file
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
at com.jcraft.jsch.ChannelSftp._realpath(ChannelSftp.java:2340)
at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:342)
at ScpTo.main(ScpTo.java:69)
File transfered successfully to host.
sftp Channel exited.
Channel disconnected.
Host Session disconnected.
代码
import java.io.File;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class ScpTo {
/**
*
*/
public ScpTo() {
// TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
String SFTPHOST = "192.168.1.3";
int SFTPPORT = 22;
String SFTPUSER = "sam-PC";
String SFTPPASS = "";
String SFTPWORKINGDIR = "C:/Users/sam/Desktop/hi.txt";
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
System.out.println("preparing the host information for sftp.");
JSch jsch = new JSch();
try {
session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
try {
session.connect();
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Host connected.");
try {
channel = session.openChannel("sftp");
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
channel.connect();
} catch (JSchException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("sftp channel opened and connected.");
channelSftp = (ChannelSftp) channel;
try {
channelSftp.cd(SFTPWORKINGDIR);
} catch (SftpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
File f = new File(SFTPWORKINGDIR);
try {
channelSftp.put(new FileInputStream(f), f.getName());
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SftpException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("File transfered successfully to host.");
channelSftp.exit();
System.out.println("sftp Channel exited.");
channel.disconnect();
System.out.println("Channel disconnected.");
session.disconnect();
System.out.println("Host Session disconnected.");
}
}
从**开始**不是一次捕获所有异常。知道你想要做什么,在寻求帮助之前缩小自己的问题。 – zubergu
发布已更新。这似乎是它与\t \t \t \t \t \t session.connect问题(); – user2211678
你是否启动了服务器?尝试运行'netstat -ano'并检查是否有一个进程正在侦听端口22. – longhua