java ssh linux 文件_java技术用ssh从linux服务器下载数据

packagecom.app.pt.backup.util;importjava.io.File;importjava.io.FileInputStream;importjava.io.InputStream;importjava.io.UnsupportedEncodingException;importjava.util.Iterator;importjava.util.Vector;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;importcom.app.common.util.FileUtil;importcom.jcraft.jsch.ChannelSftp;importcom.jcraft.jsch.ChannelSftp.LsEntry;importcom.jcraft.jsch.JSch;importcom.jcraft.jsch.JSchException;importcom.jcraft.jsch.Session;importcom.jcraft.jsch.SftpException;/*** SFTP帮助类

*@authorwangbailin

**/

public classSFTPUtil {private static Log log = LogFactory.getLog(SFTPUtil.class);/*** 连接sftp服务器

*@paramhost 远程主机ip地址

*@paramport sftp连接端口,null 时为默认端口

*@paramuser 用户名

*@parampassword 密码

*@return*@throwsJSchException*/

public static Session connect(String host, Integer port, String user, String password) throwsJSchException{

Session session= null;try{

JSch jsch= newJSch();if(port != null){

session=jsch.getSession(user, host, port.intValue());

}else{

session=jsch.getSession(user, host);

}

session.setPassword(password);//设置第一次登陆的时候提示,可选值:(ask | yes | no)

session.setConfig("StrictHostKeyChecking", "no");//30秒连接超时

session.connect(30000);

}catch(JSchException e) {

e.printStackTrace();

System.out.println("SFTPUitl 获取连接发生错误");throwe;

}returnsession;

}/*** sftp上传文件(夹)

*@paramdirectory

*@paramuploadFile

*@paramsftp

*@throwsException*/

public static void upload(String directory, String uploadFile, ChannelSftp sftp) throwsException{

System.out.println("sftp upload file [directory] : "+directory);

System.out.println("sftp upload file [uploadFile] : "+uploadFile);

File file= newFile(uploadFile);if(file.exists()){//这里有点投机取巧,因为ChannelSftp无法去判读远程linux主机的文件路径,无奈之举

try{

Vector content=sftp.ls(directory);if(content == null){

sftp.mkdir(directory);

}

}catch(SftpException e) {

sftp.mkdir(directory);

}//进入目标路径

sftp.cd(directory);if(file.isFile()){

InputStream ins= newFileInputStream(file);//中文名称的

sftp.put(ins, new String(file.getName().getBytes(),"UTF-8"));//sftp.setFilenameEncoding("UTF-8");

}else{

File[] files=file.listFiles();for(File file2 : files) {

String dir=file2.getAbsolutePath();if(file2.isDirectory()){

String str=dir.substring(dir.lastIndexOf(file2.separator));

directory= FileUtil.normalize(directory +str);

}

upload(directory,dir,sftp);

}

}

}

}/*** sftp下载文件(夹)

*@paramdirectory 下载文件上级目录

*@paramsrcFile 下载文件完全路径

*@paramsaveFile 保存文件路径

*@paramsftp ChannelSftp

*@throwsUnsupportedEncodingException*/

public static void download(String directory,String srcFile, String saveFile, ChannelSftp sftp) throwsUnsupportedEncodingException {

Vector conts= null;try{

conts=sftp.ls(srcFile);

}catch(SftpException e) {

e.printStackTrace();

log.debug("ChannelSftp sftp罗列文件发生错误",e);

}

File file= newFile(saveFile);if(!file.exists()) file.mkdir();//文件

if(srcFile.indexOf(".") > -1){try{

sftp.get(srcFile, saveFile);

}catch(SftpException e) {

e.printStackTrace();

log.debug("ChannelSftp sftp下载文件发生错误",e);

}

}else{//文件夹(路径)

for (Iterator iterator =conts.iterator(); iterator.hasNext();) {

LsEntry obj=(LsEntry) iterator.next();

String filename= new String(obj.getFilename().getBytes(),"UTF-8");if(!(filename.indexOf(".") > -1)){

directory= FileUtil.normalize(directory + System.getProperty("file.separator") +filename);

srcFile=directory;

saveFile= FileUtil.normalize(saveFile + System.getProperty("file.separator") +filename);

}else{//扫描到文件名为".."这样的直接跳过

String[] arrs = filename.split("\\.");if((arrs.length > 0) && (arrs[0].length() > 0)){

srcFile= FileUtil.normalize(directory + System.getProperty("file.separator") +filename);

}else{continue;

}

}

download(directory, srcFile, saveFile, sftp);

}

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值