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 packagecom.longyg.sftp;2
3
4
5 importjava.util.Map;6
7 importjava.util.Properties;8
9
10
11 importorg.apache.log4j.Logger;12
13
14
15 importcom.jcraft.jsch.Channel;16
17 importcom.jcraft.jsch.ChannelSftp;18
19 importcom.jcraft.jsch.JSch;20
21 importcom.jcraft.jsch.JSchException;22
23 importcom.jcraft.jsch.Session;24
25
26
27 public classSFTPChannel {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 sftpDetails, int timeout) throwsJSchException {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 = newProperties();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 = " +ftpUserName96
97 + ", returning: " +channel);98
99 return(ChannelSftp) channel;100
101 }102
103
104
105 public void closeChannel() throwsException {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 }