apache commonsnet对FTP上传下载很好,但有个致命缺点。它天生不支持SFTP协议。然而现在很多FTP服务器都是SFTP协议。所以就不能在common-net的API了。
使用JSch(但是它的API没有common-net丰富)。
Jsch简单使用 SFTP上传下载:
1.下载jsch依赖的jar,具体可以百度。
2.上传
JSch jsch = new JSch(); // 创建JSch对象
Session session = jsch.getSession("ftp用户名", "IP", 端口);
session.setPassword(ftpUserPwd);
session.setConfig("StrictHostKeyChecking","no"); // 为Session对象设置properties
session.setTimeout(10000); // 设置timeout时间
session.connect(); // 通过Session建立链接
ChannelSftp channel = (ChannelSftp) session.openChannel("sftp"); // 打开SFTP通道
channel.connect(); // 建立SFTP通道的连接
//channel.cd(ftpFileDir);//进入FTP的某个目录
try{
channel.cd(dirs[i]);//目录不存在会报异常
}catch (SftpException e) {
if(channel.SSH_FX_NO_SUCH_FILE == e.id){ //表示目录不存在
channel.mkdir(dirs[i]);
channel.cd(dirs[i]);
}
}
channel.put(srcFile, targFile, ChannelSftp.OVERWRITE);//上传
//记得关闭连接
channel.quit();
channel.disconnect();
session.close();
3.下载:
ByteArrayOutputStream outArr = null;
ChannelSftp channel = null;
try {
outArr = new ByteArrayOutputStream();
channel = (ChannelSftp) session.openChannel("sftp");
channel.connect(); // 建立SFTP通道的连接
channel.get(src, outArr);
} catch (Exception e) {
e.printStackTrace();
throw new Exception(e);
}finally{
channel.quit();
channel.disconnect();
}
return outArr;