SFTP文件的上傳、下載、刪除等操作

sftp工具類:

package 

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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 logger = LoggerFactory.getLogger(this.getClass());  
    
    private ChannelSftp sftp;  
        
    private Session session;  
    /** SFTP 登錄用戶名*/    
    private String username; 
    /** SFTP 登錄密碼*/    
    private String password;  
    /** 私鑰 */    
    private String privateKey;  
    /** SFTP 服務(wù)器地址IP地址*/    
    private String host;  
    /** SFTP 端口*/  
    private int port;  
        
    /**  
     * 構(gòu)造基于密碼認(rèn)證的sftp對象  
     */    
    public SFTPUtil(String username, String password, String host, int port) {  
        this.username = username;  
        this.password = password;  
        this.host = host;  
        this.port = port;  
    } 
    
    /**  
     * 構(gòu)造基于秘鑰認(rèn)證的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服務(wù)器 
     */  
    public boolean connectSftp(){  
        try {  
            JSch jsch = new JSch();  
            if (privateKey != null) {  
                jsch.addIdentity(privateKey);// 設(shè)置私鑰  
            }  
    
            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;  
            return true;
        } catch (JSchException e) { 
            logger.error("sftp鏈接異常:", e);
            return false;
        }  
    }    
    
    /** 
     * 關(guān)閉連接 server  
     */  
    public void close(){  
        if (sftp != null) {  
            if (sftp.isConnected()) {  
                sftp.disconnect();  
            }  
        }  
        if (session != null) {  
            if (session.isConnected()) {  
                session.disconnect();  
            }  
        }  
    }  

    
    /**  
     * 將輸入流的數(shù)據(jù)上傳到sftp作為文件
     * 
     * @param remotePath  sftp文件路徑
     * @param sftpFileName  sftp端文件名  
     * @param in   輸入流  
     */  
    public void upload(String remotePath, String sftpFileName, InputStream input) throws SftpException{  
        try {   
            sftp.cd(remotePath);
        } catch (SftpException e) { 
            //目錄不存在,則創(chuàng)建文件夾
            String [] dirs=remotePath.split(File.separator);
            String tempPath=remotePath;
            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 remotePath sftp文件路徑
     * @param downloadFile 下載的文件 
     * @param saveFile 存在本地的路徑 
     * @throws IOException  
     */    
    public void download(String saveFile, String remotePath, String fileName) throws Exception{  
        if (remotePath != null && !"".equals(remotePath)) {  
            sftp.cd(remotePath);  
        }  
        File file = new File(saveFile+File.separator+fileName);  
        if(!file.getParentFile().exists()){
            file.getParentFile().mkdirs();
        }
        FileOutputStream out = new FileOutputStream(file);
        
        sftp.get(fileName, out); 
        
        if( out != null){
            out.close();
        }
    }  
    
    /**  
     * 下載文件 
     * @param directory 下載目錄 
     * @param downloadFile 下載的文件名 
     * @return 字節(jié)數(shù)組 
     */  
    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 SftpException, IOException {  
        SFTPUtil sftp = new SFTPUtil("用戶名", "密碼", "ip地址", 22);  
//        sftp.login();  
        File file = new File("D:\\圖片\\t0124dd095ceb042322.jpg");  
        InputStream is = new FileInputStream(file);  
          
//        sftp.upload("基礎(chǔ)路徑","文件路徑", "test_sftp.jpg", is);  
        sftp.close();  
    }  
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容