JSch

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 }
原文地址:https://www.cnblogs.com/lvfeilong/p/ewrw423dgfd.html