最近用到SFTP上傳文件查找了一些資料后自己做了一點(diǎn)總結(jié),方便以后的查詢。具體代碼如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
/** * 將文件上傳到服務(wù)器 * * @param filePath * 文件路徑 * @param channelSftp * channelSftp對象 * @return */ public static boolean uploadFile(String filePath, ChannelSftp channelSftp) { OutputStream outstream = null ; InputStream instream = null ; boolean successFlag = false ; try { File isfile = new File(filePath); if (isfile.isFile()) { outstream = channelSftp.put(isfile.getName()); File file = new File(filePath); if (file.exists()) { instream = new FileInputStream(file); byte b[] = new byte [ 1024 ]; int n; while ((n = instream.read(b)) != - 1 ) { outstream.write(b, 0 , n); } outstream.flush(); } successFlag = true ; } } catch (Exception e) { e.printStackTrace(); } finally { try { if (instream != null ) { instream.close(); } if (outstream != null ) { outstream.close(); } } catch (IOException e) { e.printStackTrace(); } } return successFlag; } private static Session initJschSession() throws JSchException { int ftpPort = 0 ; String ftpHost = "" ; String port = "00" ; //sftp的端口號 String ftpUserName = "" ; //用戶名 String ftpPassword = "" ; //鏈接的密碼 String privateKey = "" ; // String passphrase = "" ; if (port != null && !port.equals( "" )) { ftpPort = Integer.valueOf(port); } JSch jsch = new JSch(); // 創(chuàng)建JSch對象 if (StringUtils.isNotBlank(privateKey) && StringUtils.isNotBlank(passphrase)) { jsch.addIdentity(privateKey, passphrase); } if (StringUtils.isNotBlank(privateKey) && StringUtils.isBlank(passphrase)) { jsch.addIdentity(privateKey); } jsch.getSession(ftpUserName, ftpHost, ftpPort); Session session = jsch.getSession(ftpUserName, ftpHost, ftpPort); // 根據(jù)用戶名,主機(jī)ip,端口獲取一個(gè)Session對象 if (StringUtils.isNotBlank(ftpPassword)) { session.setPassword(ftpPassword); // 設(shè)置密碼 } return session; } /** * 獲取ChannelSftp鏈接 * * @param timeout * 超時(shí)時(shí)間 * @return 返回ChannelSftp對象 * @throws JSchException */ public static ChannelSftp getChannelSftp(Session session, int timeout) throws JSchException { Channel channel = null ; Properties config = new Properties(); config.put( "StrictHostKeyChecking" , "no" ); session.setConfig(config); // 為Session對象設(shè)置properties session.setTimeout(timeout); // 設(shè)置timeout時(shí)間 session.connect(); // 通過Session建立鏈接 channel = session.openChannel( "sftp" ); // 打開SFTP通道 channel.connect(); // 建立SFTP通道的連接 return (ChannelSftp) channel; } /** * 斷開sftp鏈接 * * @param session * 會(huì)話 * @param channel * 通道 */ public static void closeConnection(Channel channel, Session session) { try { if (session != null ) { session.disconnect(); //關(guān)閉session鏈接 } if (channel != null ) { channel.disconnect(); //斷開連接 } } catch (Exception e) { e.printStackTrace(); } } |
這里的用戶名密碼都是自己設(shè)置,這里的方法進(jìn)行了簡單的封裝,方便使用。
以上所述是小編給大家介紹的Java使用SFTP上傳文件到服務(wù)器的簡單使用,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對服務(wù)器之家網(wǎng)站的支持!
原文鏈接:http://www.cnblogs.com/tangkai/p/3339285.html