JSch:纯JAVA实现SFTP文件上传和下载

分享到:
    如果你想用纯JAVA实现SFTP文件上传或下载,或者是想纯JAVA连接到SSH2服务器上执行命令,那就使用JSch.jar包吧。这里我们先描述实现SFTP协议的上传和下载,上代码和详细的代码注释:
/**
 * 利用JSch包实现SFTP下载、上传文件
 * @param ip 主机IP
 * @param user 主机登陆用户名
 * @param psw  主机登陆密码
 * @param port 主机ssh2登陆端口,如果取默认值,传-1
 */
public static void sshSftp(String ip, String user, String psw ,int port) throws Exception{
	Session session = null;
	Channel channel = null;
JSch jsch = new JSch();
if(port <=0){
//连接服务器,采用默认端口
session = jsch.getSession(user, ip);
	}else{
//采用指定的端口连接服务器
session = jsch.getSession(user, ip ,port);
	}
//如果服务器连接不上,则抛出异常
	if (session == null) {
throw new Exception("session is null");
	}
//设置登陆主机的密码
	session.setPassword(psw);//设置密码
//设置第一次登陆的时候提示,可选值:(ask | yes | no)
	session.setConfig("StrictHostKeyChecking", "no");
	//设置登陆超时时间
session.connect(30000);
try {
//创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
//进入服务器指定的文件夹
sftp.cd("domains");
//列出服务器指定的文件列表
Vector v = sftp.ls("*.txt");
for(int i=0;i<v.size();i++){
System.out.println(v.get(i));
}
//以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
OutputStream outstream = sftp.put("1.txt");
InputStream instream = new FileInputStream(new File("c:/print.txt"));
byte b[] = new byte[1024];
int n;
while ((n = instream.read(b)) != -1) {
outstream.write(b, 0, n);
}
outstream.flush();
outstream.close();
instream.close();
	} catch (Exception e) {
e.printStackTrace();
	} finally {
session.disconnect();
channel.disconnect();
	}
}
昵    称:
验证码:

相关文档: