使用sftp技术上传到远程服务器,必须参数有服务器ip、用户名、密码、上传文件的路径及文件,代码如下,经测试,可直接复制粘贴使用,使用时需导入jar包JSch.jar;
public static void sshSftp(String ip, String user, String psw ,int port,String filePath, String fileName,String localFilePathName) 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");
//sftp.mkdir("test");
//sftp.cd("test");
String directory = "zz/user/we";
try{
sftp.cd(directory);
}catch(SftpException sException){
if(sftp.SSH_FX_NO_SUCH_FILE == sException.id){
sftp.mkdir(directory);
sftp.cd(directory);
}
}
String[] folders = filePath.split( "/" );
for ( String folder : folders ) {
if ( folder.length() > 0 ) {
try {
sftp.cd(folder);
}
catch ( SftpException e ) {
sftp.mkdir(folder);
sftp.cd(folder);
}
}
}
//列出服务器指定的文件列表
Vector v = sftp.ls("*.txt");
for(int i=0;i<v.size();i++){
System.out.println(v.get(i));
}
//以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
// 远程目标文件
OutputStream outstream = sftp.put(fileName);
// 本地文件
InputStream instream = new FileInputStream(new File(localFilePathName));
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();
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
String ip ="192.168.0.138";
String user = "huixiang";
String pwd = "huixiang";
int port = 22;
String filePaht="zhxin/test/dier";
String fileName="myTest.txt";
new sftp().sshSftp(ip, user, pwd, port,filePaht,fileName);
本文出自 “画江湖” 博客,谢绝转载!
原文:http://751756016.blog.51cto.com/6308835/1890495