import com.jcraft.jsch.*;importjava.io.InputStream;importjava.util.Properties;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;/***@authorfc
*@versionV1.0
* @Title SFTPConnect
* @Package com.jsch
* @Descript :TODO()
* @date : 2018/8/30 下午3:50*/
public classSftpConnect {privateString user;privateString password;privateString host;private intport;privateChannelSftp channelSftp;privateSession session;private Logger logger = LoggerFactory.getLogger(SftpConnect.class);private final String NO_SUCH_FILE = "No such file";public SftpConnect(String user, String password, String host, intport) {this.user =user;this.password =password;this.host =host;this.port =port;
}privateChannelSftp connect(){
JSch jSch=newJSch();try{
session=jSch.getSession(user,host,port);
Properties sshConfig= newProperties();
sshConfig.put("StrictHostKeyChecking", "no");
session.setPassword(password);
session.setConfig(sshConfig);
session.connect();
channelSftp= (ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
}catch(JSchException e) {return null;
}returnchannelSftp;
}/*** 断开连接*/
private voiddisconnect() {
channelSftp.disconnect();
session.disconnect();
}public booleanupLoadFile(String path,String filename, InputStream is){if(channelSftp == null){
logger.debug("初始化sftp连接:连接地址:{}",host);
connect();
logger.trace("sftp连接初始化完成:{}",host);
}try{
validatePath(path);
channelSftp.put(is,filename);
disconnect();
}catch(SftpException e) {
logger.error("文件上传失败:\n{}",e);return false;
}return true;
}/*** 验证服务器文件夹路径,如不存在则新建
*@parampath*/
private void validatePath(String path) throwsSftpException {try{
channelSftp.lstat(path);
channelSftp.cd(path);
}catch(SftpException e) {if(NO_SUCH_FILE.equals(e.getMessage())){
logger.debug("{} 不存在,创建该路径",path);
String[] paths= path.split("/");for(String p : paths){try{
channelSftp.cd(p);
}catch(SftpException e1) {
channelSftp.mkdir(p);
channelSftp.cd(p);
}
}
}else{throwe;
}
}
}/*** 下载文件
*@parampath
*@paramfilename
*@param: is
*@return
*/
publicInputStream downFile(String path,String filename){if(channelSftp == null){
logger.debug("初始化sftp连接:连接地址:{}",host);
connect();
logger.trace("sftp连接初始化完成:{}",host);
}try{
channelSftp.cd(path);
InputStream is=channelSftp.get(filename);
disconnect();returnis;
}catch(SftpException e) {return null;
}
}
}