SftpUtils

作者: knock | 来源:发表于2020-07-28 23:22 被阅读0次
    
    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>
    

    相关文章

      网友评论

          本文标题:SftpUtils

          本文链接:https://www.haomeiwen.com/subject/nalcrktx.html