java sftp实现上传和下载。
com.jcraft
jsch
0.1.54
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.Vector;
importorg.Apache.com mons.logging.log;
importorg.Apache.com mons.logging.log factory;
importcom.jcraft.jsch.Channel;
import com.j craft.jsch.channels FTP;
importcom.jcraft.jsch.JSch;
import com.j craft.jsch.jschexception;
importcom.jcraft.jsch.Session;
//*
*@date2018年3月20日下午10:26:54
*@docsftp工具类,实现【本地到服务器】文件【上传与下载】
*@依赖包com.jcraftjsch
*0.1.55
*/
publicclassSftpUtil{
privatestaticloglog=log factory.get log (sftp util.class;
privatestaticstringfile=' config/sftp.properties ';
privatestaticsessionsession=空;
privatestaticfinalinttimeout=10000; //10秒
privatestaticvoidinit (
//如果有加密,可以在这里解密
string user=properties utils.getproperty (file,' sftp.user ' );
string pass=properties utils.getproperty (file,' sftp.pass );
stringportstr=properties utils.getproperty (file,' sftp.port ' );
stringip=properties utils.getproperty (file,' sftp.ip ' );
integer port=空;
入口!=空! ' '.equals(Portstr ) ) }
port=integer.parseint(Portstr );
}
try{
JSchjsch=newJSch (;
if(port=0||port==null ) ) /连接到服务器,默认端口:采用默认22
session=jsch.getsession(user,ip );
}else{//使用指定端口连接到服务器
sssion=jsch.getsession(user,ip,port );
}
//如果服务器无法连接,则抛出异常
if(session==null ) {
log.info(sessionisnull );
返回;
}
//设定登录超时时间5秒
sssion.connect(timeout;
//设置登录主机的密码
sssion.setpassword(pass ); //设定密码
//设置第一次登录的提示(选项值: (ask|yes|no ) )。
session.set config (' stricthostkeychecking ',' no ' );
}catch(exceptione ) {
log.error (sftp util.init.exception1),e );
}
}
//*
*@paramsrc
*服务器中的文件名: a.jpg
*@paramdest
*目标文件名,带路径: E:/a.jpg
*@paramtempPath
*服务器路径
*/
pub
lic static void downloadFile(String src, String dest) {if (session == null) {
init();
}
Channel channel = null;
try {
channel = (Channel) session.openChannel("sftp");
channel.connect(timeout);
ChannelSftp sftp = (ChannelSftp) channel;
// 进入服务器指定的文件夹
sftp.get(src, dest); // 下载
sftp.quit();
sftp.disconnect();
} catch (Exception e) {
log.error("SFTPUtil.uploadFile.exception1", e);
} finally {
if (channel != null) {
channel.disconnect();
}
}
}
public static void downloadFile(String src, OutputStream output) {
if (session == null) {
init();
}
Channel channel = null;
try {
channel = (Channel) session.openChannel("sftp");
channel.connect(timeout);
ChannelSftp sftp = (ChannelSftp) channel;
// 进入服务器指定的文件夹
sftp.get(src, output);// 下载
sftp.quit();
sftp.disconnect();
} catch (Exception e) {
log.error("SFTPUtil.uploadFile.exception1", e);
} finally {
if (channel != null) {
channel.disconnect();
}
}
}
/**
* @param is
* 文件输入流
* @param dest
* 文件名称 a.jpg
* @param tempPath
* 路径
*/
public static void uploadFile(InputStream is, String dest) {
if (session == null) {
init();
}
Channel channel = null;
try {
channel = (Channel) session.openChannel("sftp");
channel.connect(timeout);
ChannelSftp sftp = (ChannelSftp) channel;
sftp.put(is, dest); // 上传
sftp.quit();
sftp.disconnect();
} catch (Exception e) {
log.error("SFTPUtil.uploadFile.exception1", e);
} finally {
if (channel != null) {
channel.disconnect();
}
}
}
/**
* 上传文件
*
* @param src
* 源文件地址 abc.jpg
* @param dest
* 目标地址 abc1.jpg
* @param tempPath
* 中间层目录 /usr/local/nginx/html/ abc.jpg
* @throws JSchException
*/
public static void uploadFile(String src, String dest) {
if (session == null) {
init();
}
Channel channel = null;
try {
channel = (Channel) session.openChannel("sftp");
channel.connect(timeout);
ChannelSftp sftp = (ChannelSftp) channel;
sftp.put(src, dest);
sftp.quit();
sftp.disconnect();
} catch (Exception e) {
log.error("SFTPUtil.uploadFile.exception1", e);
} finally {
if (channel != null) {
channel.disconnect();
}
}
}
/**
* 模版 : 使用输入输出流
*
* 利用JSch包实现SFTP下载、上传文件
*
* @param ip
* 主机IP
* @param user
* 主机登陆用户名
* @param psw
* 主机登陆密码
* @param port
* 主机ssh2登陆端口,如果取默认值,传-1
*/
@SuppressWarnings("unused")
private static void sshSftp(String ip, String user, String pass, int port) throws Exception {
Session session = null;
Channel channel = null;
JSch jsch = new JSch();
if (port <= 0) {
// 连接服务器,采用默认端口:默认22
session = jsch.getSession(user, ip);
} else {
// 采用指定的端口连接服务器
session = jsch.getSession(user, ip, port);
}
// 如果服务器连接不上,则抛出异常
if (session == null) {
throw new Exception("session is null");
}
// 设置登陆主机的密码
session.setPassword(pass);// 设置密码
// 设置第一次登陆的时候提示,可选值:(ask | yes | no)
session.setConfig("StrictHostKeyChecking", "no");
// 设置登陆超时时间
session.connect(timeout);
try {
// 创建sftp通信通道
channel = (Channel) session.openChannel("sftp");
channel.connect(1000);
ChannelSftp sftp = (ChannelSftp) channel;
// 进入服务器指定的文件夹
sftp.cd("/usr/local/nginx/html");
// 列出服务器指定的文件列表
Vector> v = sftp.ls("*");// "*.txt"
for (int i = 0; i
System.out.println(v.get(i));
}
// 以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
OutputStream outstream = sftp.put("1117.jpg");
InputStream instream = new FileInputStream(new File("E:/IMG/7.jpg"));
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) {
// String src = "E:/kare20.png" ;
// String dest = "kare.png";
// uploadFile(src, dest);
String src = "D:/潇洒的茉莉.jpg";
String dest = "/usr/local/images/advert/999.jpg";
uploadFile(src, dest);
}
}#SFTP相关配置
# 主机IP
sftp.ip=192.168.8.111
# 用户
sftp.user=dev
# 密码
sftp.pass=dev123
# 端口;默认22
sftp.port=22
# 默认路径
sftp.path=/usr/local/nginx/html
标签:
java
sftp
出处:https://www.meihaocloud.com.com/b_185.html , 欢迎转载,请在文章页标出原文连接 !