sftp 工具类

maven


   com.jcraft
   jsch
   0.1.50


   commons-lang
   commons-lang
   2.6


   javax.transaction
   jta
   1.1

工具类代码

package com.example.cc.util;

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

import javax.transaction.SystemException;

import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpATTRS;
import com.jcraft.jsch.SftpException;

public class SFTPOperateUtil {

   private static Logger logger = LoggerFactory.getLogger(SFTPOperateUtil.class);

   
   public static Channel getChannel(Session session) {
      Channel channel = null;
      try {
         channel = session.openChannel("sftp");
         channel.connect();
         logger.info("get Channel success!");
      } catch (JSchException e) {
         logger.info("get Channel fail!", e);
      }
      return channel;
   }

   public static Session getSession(String host, int port, String username, final String password) throws JSchException {
      Session session = null;
         JSch jsch = new JSch();
         jsch.getSession(username, host, port);
         session = jsch.getSession(username, host, port);
         session.setPassword(password);
         Properties sshConfig = new Properties();
         sshConfig.put("StrictHostKeyChecking", "no");
         session.setConfig(sshConfig);
         session.connect();
         logger.info("Session connected!");
      return session;
   }

   /**
    * 创建文件夹
    * 
    * @param sftp
    * @param dir
    *            文件夹名称
    */
   public static void mkdir(ChannelSftp sftp, String dir) {
      try {
         sftp.mkdir(dir);
         logger.info("创建文件夹成功!");
      } catch (SftpException e) {
         logger.info("创建文件夹失败!");
         e.getMessage();
      }
   }

   /**
    * @param sftp
    * @param dir
    *            上传目录
    * @param file
    *            上传文件
    * @return
    */
   public static Boolean uploadFile(ChannelSftp sftp, String dir, File file) throws Exception{
      Boolean result = false;
      FileInputStream fileInputStream=null;
      try {
         sftp.cd(dir);
         // File file = new File("D://34.txt"); //要上传的本地文件
         if (file != null) {
            fileInputStream = new FileInputStream(file);
            sftp.put(fileInputStream, file.getName());
            result = true;
            fileInputStream.close();
            logger.info("上传成功!");
         } else {
            logger.info("文件为空!不能上传!!");
         }
      } catch (Exception e) {
         logger.info("上传失败!", e);
      }finally {
         if (fileInputStream != null){
            fileInputStream.close();
         }
      }
      return result;
   }

   /**
    * 上传单个文件
    *
    * @param directory     上传到SFTP服务器的路径
    * @param uploadFileUrl 文件路径
    */
   public static Boolean  upload(String directory, String uploadFileUrl,ChannelSftp sftp){
      Boolean result = false;
      File file = new File(uploadFileUrl);
      try{
         result =uploadFile(sftp,directory, file);
      } catch (Exception e) {
         logger.error("上传文件异常!", e);
      }
      return result;
   }
   /**
    * 下载文件
    * 
    * @param directory
    *            下载目录
    * @param downloadFile
    *            下载的文件
    * @param saveFile
    *            存在本地的路径
    * @param sftp
    */
   public static Boolean download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
      Boolean result = false;
      try {
         sftp.cd(directory);
         sftp.get(downloadFile, saveFile);
         result = true;
      } catch (Exception e) {
         logger.info("下载失败!", e);
      }
      return result;
   }


   /**
    * 获取文件夹下的文件
    *
    * @param directory     路径
    * @return
    */
   public static Vector listFiles(String directory,ChannelSftp sftp){
      try{
         if(isDirExist(directory,sftp)){
            Vector vector =  sftp.ls(directory);
            //移除上级目录和根目录:"." ".."
            vector.remove(0);
            vector.remove(0);
            return vector;
         }
      }catch (SftpException e){
         logger.error("获取文件夹信息异常!", e);
      }
      return null;
   }

   /**
    * 获取文件夹下的文件
    *
    * @param directory     路径
    * @return
    */
   public static List listFilesName(String directory,ChannelSftp sftp){
      List filesName = new ArrayList();
      try{
         if(isDirExist(directory,sftp)){
            Vector vector =  sftp.ls(directory);
            //移除上级目录和根目录:"." ".."
            vector.remove(0);
            vector.remove(0);
            Iterator iterator = vector.iterator();
            while(iterator.hasNext()){
               ChannelSftp.LsEntry file = (ChannelSftp.LsEntry) iterator.next();
               String fileName = file.getFilename();
               if(!isDirExist(fileName,sftp)){
                  filesName.add(fileName);
               }
            }
         }
      }catch (SftpException e){
         logger.error("获取文件夹信息异常!", e);
      }
      return filesName;
   }
   /**
    * 删除文件
    * 
    * @param directory
    *            要删除文件所在目录
    * @param deleteFile
    *            要删除的文件
    * @param sftp
    */
   public static String delete(String directory, String deleteFile, ChannelSftp sftp) {
      String result = "";
      try {
         sftp.cd(directory);
         sftp.rm(deleteFile);
         result = "删除成功!";
      } catch (Exception e) {
         result = "删除失败!";
         logger.info("删除失败!", e);
      }
      return result;
   }
   
   
   /** 
     * 创建一个文件目录 
    * @throws SystemException 
     */  
    public static void createDir(String createpath, ChannelSftp sftp) throws SystemException {
           try {
               if (isDirExist(createpath,sftp)) {

               }else{
                   String pathArry[] = createpath.split("/");
                   for (int i=0;i

你可能感兴趣的:(工具类)