java sftp实现上传和下载。
com.jcraft
jsch
0.1.54
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.InputStream;
importjava.io.OutputStream;
importjava.util.Vector;
mons.logging.Log;
mons.logging.LogFactory;
importcom.jcraft.jsch.Channel;
importcom.jcraft.jsch.ChannelSftp;
importcom.jcraft.jsch.JSch;
importcom.jcraft.jsch.JSchException;
importcom.jcraft.jsch.Session;
/**
*@date3月20日下午10:26:54
*@docsftp工具类,实现【本地到服务器】文件【上传和下载】
*@依赖包com.jcraftjsch
*0.1.55
*/
publicclassSftpUtil{
privatestaticLoglog=LogFactory.getLog(SftpUtil.class);
privatestaticStringFILE="config/sftp.properties";
privatestaticSessionsession=null;
privatestaticfinalinttimeout=10000;//10秒
privatestaticvoidinit(){
//如果有加密,可在此处解密
Stringuser=PropertiesUtils.getProperty(FILE,"sftp.user");
Stringpass=PropertiesUtils.getProperty(FILE,"sftp.pass");
StringportStr=PropertiesUtils.getProperty(FILE,"sftp.port");
Stringip=PropertiesUtils.getProperty(FILE,"sftp.ip");
Integerport=null;
if(portStr!=null&&!"".equals(portStr)){
port=Integer.parseInt(portStr);
}
try{
JSchjsch=newJSch();
if(port<=0||port==null){//连接服务器,采用默认端口:默认22
session=jsch.getSession(user,ip);
}else{//采用指定的端口连接服务器
session=jsch.getSession(user,ip,port);
}
//如果服务器连接不上,则抛出异常
if(session==null){
log.info("sessionisnull");
return;
}
//设置登陆超时时间5秒
session.connect(timeout);
//设置登陆主机的密码
session.setPassword(pass);//设置密码
//设置第一次登陆的时候提示,可选值:(ask|yes|no)
session.setConfig("StrictHostKeyChecking","no");
}catch(Exceptione){
log.error("SFTPUtil.init.exception1",e);
}
}
/**
*@paramsrc
*服务器中的文件名:a.jpg
*@paramdest
*目的地的文件名称,带路径:E:/a.jpg
*@paramtempPath
*服务器路径
*/
publicstaticvoiddownloadFile(Stringsrc,Stringdest){
if(session==null){
init();
}
Channelchannel=null;
try{
channel=(Channel)session.openChannel("sftp");
channel.connect(timeout);
ChannelSftpsftp=(ChannelSftp)channel;
//进入服务器指定的文件夹
sftp.get(src,dest);//下载
sftp.quit();
sftp.disconnect();
}catch(Exceptione){
log.error("SFTPUtil.uploadFile.exception1",e);
}finally{
if(channel!=null){
channel.disconnect();
}
}
}
publicstaticvoiddownloadFile(Stringsrc,OutputStreamoutput){
if(session==null){
init();
}
Channelchannel=null;
try{
channel=(Channel)session.openChannel("sftp");
channel.connect(timeout);
ChannelSftpsftp=(ChannelSftp)channel;
//进入服务器指定的文件夹
sftp.get(src,output);//下载
sftp.quit();
sftp.disconnect();
}catch(Exceptione){
log.error("SFTPUtil.uploadFile.exception1",e);
}finally{
if(channel!=null){
channel.disconnect();
}
}
}
/**
*@paramis
*文件输入流
*@paramdest
*文件名称a.jpg
*@paramtempPath
*路径
*/
publicstaticvoiduploadFile(InputStreamis,Stringdest){
if(session==null){
init();
}
Channelchannel=null;
try{
channel=(Channel)session.openChannel("sftp");
channel.connect(timeout);
ChannelSftpsftp=(ChannelSftp)channel;
sftp.put(is,dest);//上传
sftp.quit();
sftp.disconnect();
}catch(Exceptione){
log.error("SFTPUtil.uploadFile.exception1",e);
}finally{
if(channel!=null){
channel.disconnect();
}
}
}
/**
*上传文件
*
*@paramsrc
*源文件地址abc.jpg
*@paramdest
*目标地址abc1.jpg
*@paramtempPath
*中间层目录/usr/local/nginx/html/abc.jpg
*@throwsJSchException
*/
publicstaticvoiduploadFile(Stringsrc,Stringdest){
if(session==null){
init();
}
Channelchannel=null;
try{
channel=(Channel)session.openChannel("sftp");
channel.connect(timeout);
ChannelSftpsftp=(ChannelSftp)channel;
sftp.put(src,dest);
sftp.quit();
sftp.disconnect();
}catch(Exceptione){
log.error("SFTPUtil.uploadFile.exception1",e);
}finally{
if(channel!=null){
channel.disconnect();
}
}
}
/**
*模版:使用输入输出流
*
*利用JSch包实现SFTP下载、上传文件
*
*@paramip
*主机IP
*@paramuser
*主机登陆用户名
*@parampsw
*主机登陆密码
*@paramport
*主机ssh2登陆端口,如果取默认值,传-1
*/
@SuppressWarnings("unused")
privatestaticvoidsshSftp(Stringip,Stringuser,Stringpass,intport)throwsException{
Sessionsession=null;
Channelchannel=null;
JSchjsch=newJSch();
if(port<=0){
//连接服务器,采用默认端口:默认22
session=jsch.getSession(user,ip);
}else{
//采用指定的端口连接服务器
session=jsch.getSession(user,ip,port);
}
//如果服务器连接不上,则抛出异常
if(session==null){
thrownewException("sessionisnull");
}
//设置登陆主机的密码
session.setPassword(pass);//设置密码
//设置第一次登陆的时候提示,可选值:(ask|yes|no)
session.setConfig("StrictHostKeyChecking","no");
//设置登陆超时时间
session.connect(timeout);
try{
//创建sftp通信通道
channel=(Channel)session.openChannel("sftp");
channel.connect(1000);
ChannelSftpsftp=(ChannelSftp)channel;
//进入服务器指定的文件夹
sftp.cd("/usr/local/nginx/html");
//列出服务器指定的文件列表
Vector>v=sftp.ls("*");//"*.txt"
for(inti=0;i
System.out.println(v.get(i));
}
//以下代码实现从本地上传一个文件到服务器,如果要实现下载,对换以下流就可以了
OutputStreamoutstream=sftp.put("1117.jpg");
InputStreaminstream=newFileInputStream(newFile("E:/IMG/7.jpg"));
byteb[]=newbyte[1024];
intn;
while((n=instream.read(b))!=-1){
outstream.write(b,0,n);
}
outstream.flush();
outstream.close();
instream.close();
}catch(Exceptione){
e.printStackTrace();
}finally{
session.disconnect();
channel.disconnect();
}
}
publicstaticvoidmain(String[]args){
//Stringsrc="E:/kare20.png";
//Stringdest="kare.png";
//uploadFile(src,dest);
Stringsrc="D:/张三.jpg";
Stringdest="/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
出处:.com/b_185.html , 欢迎转载,请在文章页标出原文连接 !