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 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 }

你可能感兴趣的:(java实现sftp文件上传)