首页 > 代码库 > JSch - Java实现的SFTP(文件上传详解篇)

JSch - Java实现的SFTP(文件上传详解篇)

http://www.byywee.com/page/M0/S755/755589.html

 

本文只介绍如何应用JSch实现的SFTP功能。

 

  SFTP是Secure File Transfer Protocol的缩写,安然文件传送和谈。可认为传输文件供给一种安然的加密办法。SFTP 为 SSH的一部份,是一种传输文件到办事器的安然体式格式。SFTP是应用加密传输认证信息和传输的数据,所以,应用SFTP是很是安然的。然则,因为这种传输体式格式应用了加密/解密技巧,所以传输效力比通俗的FTP要低得多,若是您对收集安然性请求更高时,可以应用SFTP庖代FTP。(来自百度的申明) 

 

  要应用JSch,须要下载它的jar包,请从官网下载它:http://www.jcraft.com/jsch/
 
ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的办法,如:

 

put():      文件上传

 

get():      文件下载

 

cd():       进入指定目次

 

ls():       获得指定目次下的文件列表

 

rename():   重定名指定文件或目次

 

rm():       删除指定文件

 

mkdir():    创建目次

 

rmdir():    删除目次

 

等等(这里省略了办法的参数,put和get都有多个重载办法,具体请看源代码,这里不一一列出。)
 
JSch支撑三种文件传输模式:

OVERWRITE完全覆盖模式,这是JSch的默认文件传输模式,即若是目标文件已经存在,传输的文件将完全覆盖目标文件,产生新的文件。
RESUME

恢复模式,若是文件已经传输一项目组,这时因为收集或其他任何原因导致文件传输中断,若是下一次传输雷同的文件,


则会从上一次中断的处所续传。

APPEND追加模式,若是目标文件已存在,传输的文件将在目标文件后追加。

创建ChannelSftp对象

 

 

编写一个对象类,按照ip,用户名及暗码获得一个SFTP channel对象,即ChannelSftp的实例对象,在应用法度中就可以应用该对象来调用SFTP的各类操纵办法。

 

SFTPChannel.java
  1 package com.longyg.sftp;  2   3   4   5 import java.util.Map;  6   7 import java.util.Properties;  8   9  10  11 import org.apache.log4j.Logger; 12  13  14  15 import com.jcraft.jsch.Channel; 16  17 import com.jcraft.jsch.ChannelSftp; 18  19 import com.jcraft.jsch.JSch; 20  21 import com.jcraft.jsch.JSchException; 22  23 import com.jcraft.jsch.Session; 24  25  26  27 public class SFTPChannel { 28  29     Session session = null; 30  31     Channel channel = null; 32  33  34  35     private static final Logger LOG = Logger.getLogger(SFTPChannel.class.getName()); 36  37  38  39     public ChannelSftp getChannel(Map<String, String> sftpDetails, int timeout) throws JSchException { 40  41  42  43         String ftpHost = sftpDetails.get(SFTPConstants.SFTP_REQ_HOST); 44  45         String port = sftpDetails.get(SFTPConstants.SFTP_REQ_PORT); 46  47         String ftpUserName = sftpDetails.get(SFTPConstants.SFTP_REQ_USERNAME); 48  49         String ftpPassword = sftpDetails.get(SFTPConstants.SFTP_REQ_PASSWORD); 50  51  52  53         int ftpPort = SFTPConstants.SFTP_DEFAULT_PORT; 54  55         if (port != null && !port.equals("")) { 56  57             ftpPort = Integer.valueOf(port); 58  59         } 60  61  62  63         JSch jsch = new JSch(); // 创建JSch对象 64  65         session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 按照用户名,主机ip,端口获取一个Session对象 66  67         LOG.debug("Session created."); 68  69         if (ftpPassword != null) { 70  71             session.setPassword(ftpPassword); // 设置暗码 72  73         } 74  75         Properties config = new Properties(); 76  77         config.put("StrictHostKeyChecking", "no"); 78  79         session.setConfig(config); // 为Session对象设置properties 80  81         session.setTimeout(timeout); // 设置timeout时候 82  83         session.connect(); // 经由过程Session建树链接 84  85         LOG.debug("Session connected."); 86  87  88  89         LOG.debug("Opening Channel."); 90  91         channel = session.openChannel("sftp"); // 打开SFTP通道 92  93         channel.connect(); // 建树SFTP通道的连接 94  95         LOG.debug("Connected successfully to ftpHost = " + ftpHost + ",as ftpUserName = " + ftpUserName 96  97                 + ", returning: " + channel); 98  99         return (ChannelSftp) channel;100 101     }102 103 104 105     public void closeChannel() throws Exception {106 107         if (channel != null) {108 109             channel.disconnect();110 111         }112 113         if (session != null) {114 115             session.disconnect();116 117         }118 119     }120 121 }

 

JSch - Java实现的SFTP(文件上传详解篇)