1. 程式人生 > >fundvaluation/src/com/pingan/rbpfunval/util/SFTP

fundvaluation/src/com/pingan/rbpfunval/util/SFTP

sco sftp new user rec ftp util comm word

package com.pingan.rbpfundval.util;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import java.util.Properties;
import java.util.Vector;

import org.apache.commons.io.IOUtils;
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.SftpException;
/**

  • 類說明 sftp工具類
    */
    public class SFTPUtil {
    private transient Logger log = LoggerFactory.getLogger(this.getClass());

    private ChannelSftp sftp;

    private Session session;
    / SFTP 登錄用戶名*/
    private String username;
    /* SFTP 登錄密碼/
    private String password;
    /
    私鑰 */
    private String privateKey;

    /* SFTP 服務器地址IP地址/
    private String host;
    /* SFTP 端口/
    private int port;

    /**

    • 構造基於密碼認證的sftp對象
      */
      public SFTPUtil(String username, String password, String host, int port) {
      this.username = username;
      this.password = password;
      this.host = host;
      this.port = port;
      }

    /**

    • 構造基於秘鑰認證的sftp對象
      */
      public SFTPUtil(String username, String host, int port, String privateKey) {
      this.username = username;
      this.host = host;
      this.port = port;
      this.privateKey = privateKey;
      }

    public SFTPUtil(){}

    /**

    • 連接sftp服務器
      */
      public void login() throws JSchException{
      //try {
      JSch jsch = new JSch();
      if (privateKey != null) {
      jsch.addIdentity(privateKey);// 設置私鑰
      }

      session = jsch.getSession(username, host, port);  
      
      if (password != null) {  
          session.setPassword(password);    
      }  
      Properties config = new Properties();  
      config.put("StrictHostKeyChecking", "no");  
      
      session.setConfig(config);  
      session.connect();  
      
      Channel channel = session.openChannel("sftp");  
      channel.connect();  
      
      sftp = (ChannelSftp) channel;  

      / } catch (JSchException e) {
      e.printStackTrace();
      }
      /
      }

    /**

    • 關閉連接 server
      */
      public void logout(){
      if (sftp != null) {
      if (sftp.isConnected()) {
      sftp.disconnect();
      }
      }
      if (session != null) {
      if (session.isConnected()) {
      session.disconnect();
      }
      }
      }

    /**

    • 將輸入流的數據上傳到sftp作為文件。文件完整路徑=basePath+directory
    • @param basePath 服務器的基礎路徑
    • @param directory 上傳到該目錄
    • @param sftpFileName sftp端文件名
    • @param in 輸入流
      */
      public void upload(String basePath,String directory, String sftpFileName, InputStream input) throws SftpException{
      try {
      sftp.cd(basePath);
      sftp.cd(directory);
      } catch (SftpException e) {
      //目錄不存在,則創建文件夾
      String [] dirs=directory.split("/");
      String tempPath=basePath;
      for(String dir:dirs){
      if(null== dir || "".equals(dir)) continue;
      tempPath+="/"+dir;
      try{
      sftp.cd(tempPath);
      }catch(SftpException ex){
      sftp.mkdir(tempPath);
      sftp.cd(tempPath);
      }
      }
      }
      sftp.put(input, sftpFileName); //上傳文件
      }

    /**

    • 下載文件。
    • @param directory 下載目錄
    • @param downloadFile 下載的文件
    • @param saveFile 存在本地的路徑
      */
      public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException{
      if (directory != null && !"".equals(directory)) {
      sftp.cd(directory);
      }
      File file = new File(saveFile);
      sftp.get(downloadFile, new FileOutputStream(file));
      }

    /**

    • 下載文件
    • @param directory 下載目錄
    • @param downloadFile 下載的文件名
    • @return 字節數組
      */
      public byte[] download(String directory, String downloadFile) throws SftpException, IOException{
      if (directory != null && !"".equals(directory)) {
      sftp.cd(directory);
      }
      InputStream is = sftp.get(downloadFile);

      byte[] fileData = IOUtils.toByteArray(is);

      return fileData;
      }

    /**

    • 刪除文件
    • @param directory 要刪除文件所在目錄
    • @param deleteFile 要刪除的文件
      */
      public void delete(String directory, String deleteFile) throws SftpException{
      sftp.cd(directory);
      sftp.rm(deleteFile);
      }

    /**

    • 列出目錄下的文件
    • @param directory 要列出的目錄
    • @param sftp
      */
      public Vector<?> listFiles(String directory) throws SftpException {
      return sftp.ls(directory);
      }

    //上傳文件測試
    public static void main(String[] args) throws JSchException, SftpException, IOException {
    SFTPUtil sftp = new SFTPUtil("pakjvalue", "123123", "101.227.100.178", 8022);
    sftp.login();
    File file = new File("/app/rbpp/java/file/20180827/fundValuation_20180827102614656.txt");
    InputStream is = new FileInputStream(file);

    sftp.upload("/","upload", "1.txt", is);  
    sftp.logout();  

    }
    }

fundvaluation/src/com/pingan/rbpfunval/util/SFTP