SftpUtils

2020-07-28  本文已影响0人  knock

package cn.microvideo.etc.util;

import com.jcraft.jsch.*;
import lombok.extern.slf4j.Slf4j;

import java.io.*;
import java.util.*;

/**
 * title: SftpUtils
 * projectName etc-server
 * description: TODO
 * date 2019/8/9 18:16
 *
 * @author yanyd
 * @since 1.0
 */
@SuppressWarnings("Duplicates")
@Slf4j
public class SftpUtils {


    public static final String PROJECT = System.getProperty("user.dir");

    private ChannelSftp sftp;

    private Session session;


    /**
     * 连接sftp服务器
     */
    public void login(String sftp_txb_username,String sftp_txb_host,String sftp_txb_port,String sftp_txb_password){
        try {
            JSch jsch = new JSch();
            session = jsch.getSession(sftp_txb_username, sftp_txb_host, Integer.parseInt(sftp_txb_port));
            session.setPassword(sftp_txb_password);
            Properties config = new Properties();
            config.put("StrictHostKeyChecking", "no");
            session.setConfig(config);
            session.connect();
            Channel channel = session.openChannel("sftp");
            channel.connect();
            sftp = (ChannelSftp) channel;
            log.info("============sftp连接成功============");
        } catch (JSchException e) {
            e.printStackTrace();
            StringTools.printerrlog(e);
            log.info("============sftp连接失败============");
        }
    }

    /**
     * 关闭连接 server
     */
    public void logout(){
        if (sftp != null) {
            if (sftp.isConnected()) {
                sftp.disconnect();
            }
        }
        if (session != null) {
            if (session.isConnected()) {
                session.disconnect();
            }
        }
    }


    /**
     * 将本地文件上传到sftp指定目录
     * 将输入流的数据上传到sftp作为文件
     * @param sftpFileName  sftp端文件名
     * @param sftp_up_path sftp目录
     */
    public boolean upload( String sftpFileName,String  sftp_up_path,InputStream inputStream){
        boolean flag=false;
        try{

            if(isDirExist(sftp_up_path)){
                sftp.cd(sftp_up_path);
            }else{
                //目录不存在,则创建文件夹
                String [] dirs=sftp_up_path.split("/");
                String tempPath="";
                for(String dir:dirs){
                    if(null== dir || "".equals(dir)) {
                        continue;
                    }
                    tempPath+="/"+dir;
                    if(isDirExist(tempPath)){
                        sftp.cd(tempPath);
                    }else{
                        sftp.mkdir(tempPath);
                        sftp.cd(tempPath);
                    }
                }
            }
            sftp.put(inputStream, sftpFileName);  //上传文件
            inputStream.close();
            flag=true;
            log.info("sftp文件上传成功:【{}】",sftpFileName);

        }catch (Exception e){
            e.printStackTrace();
            StringTools.printerrlog(e);
            flag=false;
            log.info("sftp文件上传失败:【{}】",sftpFileName);
        }
        return  flag;
    }


    /**
     * 将指定目录下的sftp文件 下载到本地
     * @param downloadFile 下载的文件
     * @param sftp_down_path sftp目录
     * @param saveFile 存在本地的路径
     */
    public boolean download( String downloadFile, String sftp_down_path,String saveFile){

        boolean flag=false;
        try{
            if(isDirExist(sftp_down_path)){
                sftp.cd(sftp_down_path);
                File file = new File(saveFile);
                FileOutputStream fileOutputStream=new FileOutputStream(file);
                sftp.get(downloadFile, fileOutputStream);
                fileOutputStream.close();
                flag=true;
                log.info("sftp文件下载成功:【{}】",downloadFile);
            }
        }catch (Exception e){
            e.printStackTrace();
            StringTools.printerrlog(e);
            flag=false;
            log.info("sftp文件下载失败:【{}】",downloadFile);
        }

        return  flag;
    }


    /**
     * 验证文件夹
     * @param remotePath
     * @return
     */
    public boolean isDirExist(String remotePath) {
        boolean flag = false;
        try {
            SftpATTRS sftpATTRS = sftp.lstat(remotePath);
            flag= sftpATTRS.isDir();
        } catch (Exception e) {
            e.printStackTrace();
            StringTools.printerrlog(e);
            flag = false;
        }
        return flag;
    }


    /**
     * 删除文件
     * @param directory 要删除文件所在目录
     * @param deleteFile 要删除的文件
     */
    public void delete(String directory, String deleteFile){
        try{
            sftp.cd(directory);
            sftp.rm(deleteFile);
        }catch (Exception e){
            e.printStackTrace();
            StringTools.printerrlog(e);
        }

    }


    /**
     *
     * 列出目录下的文件
     * @param directory 要列出的目录
     */
    public List<String> listFiles(String directory){
        List<String> list=new ArrayList<>();
        Vector<ChannelSftp.LsEntry> vector=new Vector<>();
        try{
            vector= sftp.ls(directory);

            for (ChannelSftp.LsEntry file : vector){
                String fileName = file.getFilename();
                list.add(fileName);
            }

        }catch (Exception e){
            e.printStackTrace();
            StringTools.printerrlog(e);
        }
        return  list;
    }


    //上传文件测试
    public static void main(String[] args) throws Exception {

    }

}


pom.xml

    <!--sftp-->
    <dependency>
      <groupId>com.jcraft</groupId>
      <artifactId>jsch</artifactId>
      <version>0.1.54</version>
    </dependency>
上一篇下一篇

猜你喜欢

热点阅读