https://www.cnblogs.com/dongliyang/p/4173583.html
java使用客户端连接远程服务器,可以使用JSch进行网络通信。同时还可以使用java界面做一些linux命令的功能,实现本地对远程的操作。
<!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.54</version>
</dependency>
本Sftp工具类的API如下所示。
1)构造方法摘要
参数:
|
2)方法摘要
boolean |
changeDir(String pathName) 切换工作目录 |
boolean |
changeToHomeDir() 切换到根目录 |
boolean |
changeToParentDir() 切换到上一级目录 |
String |
currentDir() 当前工作目录 |
boolean |
delDir(String dirName) 删除文件夹 |
boolean |
delFile(String fileName) 删除文件 |
boolean |
downloadFile(String remotePath, String fileName,String localPath) 下载文件 |
boolean |
exist(String name) 当前目录是否存在文件或文件夹 |
boolean |
exist(String path, String name) 指定目录下,是否存在文件或文件夹 |
boolean |
existDir(String name) 当前目录是否存在文件夹 |
boolean |
existDir(String path, String name) 指定目录下,是否存在文件夹 |
boolean |
existFile(String name) 当前目录是否存在文件 |
boolean |
existFile(String path, String name) 指定目录下,是否存在文件 |
boolean |
login() 登陆SFTP服务器 |
void |
logout() 登出 |
String[] |
ls() 当前目录下文件及文件夹名称列表 |
String[] |
ls(String pathName) 指定目录下文件及文件夹名称列表 |
String[] |
lsDirs() 当前目录下文件夹名称列表 |
String[] |
lsDirs(String pathName) 指定目录下文件夹名称列表 |
String[] |
lsFiles() 当前目录下文件名称列表 |
String[] |
lsFiles(String pathName) 指定目录下文件名称列表 |
boolean |
makeDir(String dirName) 创建目录 |
boolean |
uploadFile(String pathName,String fileName,InputStream input) 上传文件 |
boolean |
uploadFile(String pathName, String fileName, 上传文件 |
3)源代码
1 import java.io.File;
2 import java.io.InputStream;
3 import java.util.ArrayList;
4 import java.util.List;
5 import java.util.Properties;
6 import java.util.Vector;
7 import org.apache.log4j.Logger;
8 import com.jcraft.jsch.ChannelSftp;
9 import com.jcraft.jsch.JSch;
10 import com.jcraft.jsch.JSchException;
11 import com.jcraft.jsch.Session;
12 import com.jcraft.jsch.SftpException;
13 import com.jcraft.jsch.ChannelSftp.LsEntry;
14
15 /**
16 * SFTP(Secure File Transfer Protocol),安全文件传送协议。
17 * @version 1.0 2014/12/18
18 * @author dongliyang
19 */
20 public class Sftp {
21
22 /** 日志记录器 */
23 private Logger logger = Logger.getLogger(Sftp.class);
24 /** Session */
25 private Session session = null;
26 /** Channel */
27 private ChannelSftp channel = null;
28 /** SFTP服务器IP地址 */
29 private String host;
30 /** SFTP服务器端口 */
31 private int port;
32 /** 连接超时时间,单位毫秒 */
33 private int timeout;
34
35 /** 用户名 */
36 private String username;
37 /** 密码 */
38 private String password;
39
40 /**
41 * SFTP 安全文件传送协议
42 * @param host SFTP服务器IP地址
43 * @param port SFTP服务器端口
44 * @param timeout 连接超时时间,单位毫秒
45 * @param username 用户名
46 * @param password 密码
47 */
48 public Sftp(String host,int port,int timeout,String username,String password){
49 this.host = host;
50 this.port = port;
51 this.timeout = timeout;
52 this.username = username;
53 this.password = password;
54 }
55
56 /**
57 * 登陆SFTP服务器
58 * @return boolean
59 */
60 public boolean login() {
61
62 try {
63 JSch jsch = new JSch();
64 session = jsch.getSession(username, host, port);
65 if(password != null){
66 session.setPassword(password);
67 }
68 Properties config = new Properties();
69 config.put("StrictHostKeyChecking", "no");
70 session.setConfig(config);
71 session.setTimeout(timeout);
72 session.connect();
73 logger.debug("sftp session connected");
74
75 logger.debug("opening channel");
76 channel = (ChannelSftp)session.openChannel("sftp");
77 channel.connect();
78
79 logger.debug("connected successfully");
80 return true;
81 } catch (JSchException e) {
82 logger.error("sftp login failed",e);
83 return false;
84 }
85 }
86
87 /**
88 * 上传文件
89 * <p>
90 * 使用示例,SFTP服务器上的目录结构如下:/testA/testA_B/
91 * <table border="1">
92 * <tr><td>当前目录</td><td>方法</td><td>参数:绝对路径/相对路径</td><td>上传后</td></tr>
93 * <tr><td>/</td><td>uploadFile("testA","upload.txt",new FileInputStream(new File("up.txt")))</td><td>相对路径</td><td>/testA/upload.txt</td></tr>
94 * <tr><td>/</td><td>uploadFile("testA/testA_B","upload.txt",new FileInputStream(new File("up.txt")))</td><td>相对路径</td><td>/testA/testA_B/upload.txt</td></tr>
95 * <tr><td>/</td><td>uploadFile("/testA/testA_B","upload.txt",new FileInputStream(new File("up.txt")))</td><td>绝对路径</td><td>/testA/testA_B/upload.txt</td></tr>
96 * </table>
97 * </p>
98 * @param pathName SFTP服务器目录
99 * @param fileName 服务器上保存的文件名
100 * @param input 输入文件流
101 * @return boolean
102 */
103 public boolean uploadFile(String pathName,String fileName,InputStream input){
104
105 String currentDir = currentDir();
106 if(!changeDir(pathName)){
107 return false;
108 }
109
110 try {
111 channel.put(input,fileName,ChannelSftp.OVERWRITE);
112 if(!existFile(fileName)){
113 logger.debug("upload failed");
114 return false;
115 }
116 logger.debug("upload successful");
117 return true;
118 } catch (SftpException e) {
119 logger.error("upload failed",e);
120 return false;
121 } finally {
122 changeDir(currentDir);
123 }
124 }
125
126 /**
127 * 上传文件
128 * <p>
129 * 使用示例,SFTP服务器上的目录结构如下:/testA/testA_B/
130 * <table border="1">
131 * <tr><td>当前目录</td><td>方法</td><td>参数:绝对路径/相对路径</td><td>上传后</td></tr>
132 * <tr><td>/</td><td>uploadFile("testA","upload.txt","up.txt")</td><td>相对路径</td><td>/testA/upload.txt</td></tr>
133 * <tr><td>/</td><td>uploadFile("testA/testA_B","upload.txt","up.txt")</td><td>相对路径</td><td>/testA/testA_B/upload.txt</td></tr>
134 * <tr><td>/</td><td>uploadFile("/testA/testA_B","upload.txt","up.txt")</td><td>绝对路径</td><td>/testA/testA_B/upload.txt</td></tr>
135 * </table>
136 * </p>
137 * @param pathName SFTP服务器目录
138 * @param fileName 服务器上保存的文件名
139 * @param localFile 本地文件
140 * @return boolean
141 */
142 public boolean uploadFile(String pathName,String fileName,String localFile){
143
144 String currentDir = currentDir();
145 if(!changeDir(pathName)){
146 return false;
147 }
148
149 try {
150 channel.put(localFile,fileName,ChannelSftp.OVERWRITE);
151 if(!existFile(fileName)){
152 logger.debug("upload failed");
153 return false;
154 }
155 logger.debug("upload successful");
156 return true;
157 } catch (SftpException e) {
158 logger.error("upload failed",e);
159 return false;
160 } finally {
161 changeDir(currentDir);
162 }
163 }
164
165 /**
166 * 下载文件
167 * <p>
168 * 使用示例,SFTP服务器上的目录结构如下:/testA/testA_B/
169 * <table border="1">
170 * <tr><td>当前目录</td><td>方法</td><td>参数:绝对路径/相对路径</td><td>下载后</td></tr>
171 * <tr><td>/</td><td>downloadFile("testA","down.txt","D:\\downDir")</td><td>相对路径</td><td>D:\\downDir\\down.txt</td></tr>
172 * <tr><td>/</td><td>downloadFile("testA/testA_B","down.txt","D:\\downDir")</td><td>相对路径</td><td>D:\\downDir\\down.txt</td></tr>
173 * <tr><td>/</td><td>downloadFile("/testA/testA_B","down.txt","D:\\downDir")</td><td>绝对路径</td><td>D:\\downDir\\down.txt</td></tr>
174 * </table>
175 * </p>
176 * @param remotePath SFTP服务器目录
177 * @param fileName 服务器上需要下载的文件名
178 * @param localPath 本地保存路径
179 * @return boolean
180 */
181 public boolean downloadFile(String remotePath,String fileName,String localPath){
182
183 String currentDir = currentDir();
184 if(!changeDir(remotePath)){
185 return false;
186 }
187
188 try {
189 String localFilePath = localPath + File.separator + fileName;
190 channel.get(fileName,localFilePath);
191
192 File localFile = new File(localFilePath);
193 if(!localFile.exists()){
194 logger.debug("download file failed");
195 return false;
196 }
197 logger.debug("download successful");
198 return true;
199 } catch (SftpException e) {
200 logger.error("download file failed",e);
201 return false;
202 } finally {
203 changeDir(currentDir);
204 }
205 }
206
207 /**
208 * 切换工作目录
209 * <p>
210 * 使用示例,SFTP服务器上的目录结构如下:/testA/testA_B/
211 * <table border="1">
212 * <tr><td>当前目录</td><td>方法</td><td>参数(绝对路径/相对路径)</td><td>切换后的目录</td></tr>
213 * <tr><td>/</td><td>changeDir("testA")</td><td>相对路径</td><td>/testA/</td></tr>
214 * <tr><td>/</td><td>changeDir("testA/testA_B")</td><td>相对路径</td><td>/testA/testA_B/</td></tr>
215 * <tr><td>/</td><td>changeDir("/testA")</td><td>绝对路径</td><td>/testA/</td></tr>
216 * <tr><td>/testA/testA_B/</td><td>changeDir("/testA")</td><td>绝对路径</td><td>/testA/</td></tr>
217 * </table>
218 * </p>
219 * @param pathName 路径
220 * @return boolean
221 */
222 public boolean changeDir(String pathName){
223 if(pathName == null || pathName.trim().equals("")){
224 logger.debug("invalid pathName");
225 return false;
226 }
227
228 try {
229 channel.cd(pathName.replaceAll("\\\\", "/"));
230 logger.debug("directory successfully changed,current dir=" + channel.pwd());
231 return true;
232 } catch (SftpException e) {
233 logger.error("failed to change directory",e);
234 return false;
235 }
236 }
237
238 /**
239 * 切换到上一级目录
240 * <p>
241 * 使用示例,SFTP服务器上的目录结构如下:/testA/testA_B/
242 * <table border="1">
243 * <tr><td>当前目录</td><td>方法</td><td>切换后的目录</td></tr>
244 * <tr><td>/testA/</td><td>changeToParentDir()</td><td>/</td></tr>
245 * <tr><td>/testA/testA_B/</td><td>changeToParentDir()</td><td>/testA/</td></tr>
246 * </table>
247 * </p>
248 * @return boolean
249 */
250 public boolean changeToParentDir(){
251 return changeDir("..");
252 }
253
254 /**
255 * 切换到根目录
256 * @return boolean
257 */
258 public boolean changeToHomeDir(){
259 String homeDir = null;
260 try {
261 homeDir = channel.getHome();
262 } catch (SftpException e) {
263 logger.error("can not get home directory",e);
264 return false;
265 }
266 return changeDir(homeDir);
267 }
268
269 /**
270 * 创建目录
271 * <p>
272 * 使用示例,SFTP服务器上的目录结构如下:/testA/testA_B/
273 * <table border="1">
274 * <tr><td>当前目录</td><td>方法</td><td>参数(绝对路径/相对路径)</td><td>创建成功后的目录</td></tr>
275 * <tr><td>/testA/testA_B/</td><td>makeDir("testA_B_C")</td><td>相对路径</td><td>/testA/testA_B/testA_B_C/</td></tr>
276 * <tr><td>/</td><td>makeDir("/testA/testA_B/testA_B_D")</td><td>绝对路径</td><td>/testA/testA_B/testA_B_D/</td></tr>
277 * </table>
278 * <br/>
279 * <b>注意</b>,当<b>中间目录不存在</b>的情况下,不能够使用绝对路径的方式期望创建中间目录及目标目录。
280 * 例如makeDir("/testNOEXIST1/testNOEXIST2/testNOEXIST3"),这是错误的。
281 * </p>
282 * @param dirName 目录
283 * @return boolean
284 */
285 public boolean makeDir(String dirName){
286 try {
287 channel.mkdir(dirName);
288 logger.debug("directory successfully created,dir=" + dirName);
289 return true;
290 } catch (SftpException e) {
291 logger.error("failed to create directory", e);
292 return false;
293 }
294 }
295
296 /**
297 * 删除文件夹
298 * @param dirName
299 * @return boolean
300 */
301 @SuppressWarnings("unchecked")
302 public boolean delDir(String dirName){
303 if(!changeDir(dirName)){
304 return false;
305 }
306
307 Vector<LsEntry> list = null;
308 try {
309 list = channel.ls(channel.pwd());
310 } catch (SftpException e) {
311 logger.error("can not list directory",e);
312 return false;
313 }
314
315 for(LsEntry entry : list){
316 String fileName = entry.getFilename();
317 if(!fileName.equals(".") && !fileName.equals("..")){
318 if(entry.getAttrs().isDir()){
319 delDir(fileName);
320 } else {
321 delFile(fileName);
322 }
323 }
324 }
325
326 if(!changeToParentDir()){
327 return false;
328 }
329
330 try {
331 channel.rmdir(dirName);
332 logger.debug("directory " + dirName + " successfully deleted");
333 return true;
334 } catch (SftpException e) {
335 logger.error("failed to delete directory " + dirName,e);
336 return false;
337 }
338 }
339
340 /**
341 * 删除文件
342 * @param fileName 文件名
343 * @return boolean
344 */
345 public boolean delFile(String fileName){
346 if(fileName == null || fileName.trim().equals("")){
347 logger.debug("invalid filename");
348 return false;
349 }
350
351 try {
352 channel.rm(fileName);
353 logger.debug("file " + fileName + " successfully deleted");
354 return true;
355 } catch (SftpException e) {
356 logger.error("failed to delete file " + fileName,e);
357 return false;
358 }
359 }
360
361 /**
362 * 当前目录下文件及文件夹名称列表
363 * @return String[]
364 */
365 public String[] ls(){
366 return list(Filter.ALL);
367 }
368
369 /**
370 * 指定目录下文件及文件夹名称列表
371 * @return String[]
372 */
373 public String[] ls(String pathName){
374 String currentDir = currentDir();
375 if(!changeDir(pathName)){
376 return new String[0];
377 };
378 String[] result = list(Filter.ALL);
379 if(!changeDir(currentDir)){
380 return new String[0];
381 }
382 return result;
383 }
384
385 /**
386 * 当前目录下文件名称列表
387 * @return String[]
388 */
389 public String[] lsFiles(){
390 return list(Filter.FILE);
391 }
392
393 /**
394 * 指定目录下文件名称列表
395 * @return String[]
396 */
397 public String[] lsFiles(String pathName){
398 String currentDir = currentDir();
399 if(!changeDir(pathName)){
400 return new String[0];
401 };
402 String[] result = list(Filter.FILE);
403 if(!changeDir(currentDir)){
404 return new String[0];
405 }
406 return result;
407 }
408
409 /**
410 * 当前目录下文件夹名称列表
411 * @return String[]
412 */
413 public String[] lsDirs(){
414 return list(Filter.DIR);
415 }
416
417 /**
418 * 指定目录下文件夹名称列表
419 * @return String[]
420 */
421 public String[] lsDirs(String pathName){
422 String currentDir = currentDir();
423 if(!changeDir(pathName)){
424 return new String[0];
425 };
426 String[] result = list(Filter.DIR);
427 if(!changeDir(currentDir)){
428 return new String[0];
429 }
430 return result;
431 }
432
433 /**
434 * 当前目录是否存在文件或文件夹
435 * @param name 名称
436 * @return boolean
437 */
438 public boolean exist(String name){
439 return exist(ls(), name);
440 }
441
442 /**
443 * 指定目录下,是否存在文件或文件夹
444 * @param path 目录
445 * @param name 名称
446 * @return boolean
447 */
448 public boolean exist(String path,String name){
449 return exist(ls(path),name);
450 }
451
452 /**
453 * 当前目录是否存在文件
454 * @param name 文件名
455 * @return boolean
456 */
457 public boolean existFile(String name){
458 return exist(lsFiles(),name);
459 }
460
461 /**
462 * 指定目录下,是否存在文件
463 * @param path 目录
464 * @param name 文件名
465 * @return boolean
466 */
467 public boolean existFile(String path,String name){
468 return exist(lsFiles(path), name);
469 }
470
471 /**
472 * 当前目录是否存在文件夹
473 * @param name 文件夹名称
474 * @return boolean
475 */
476 public boolean existDir(String name){
477 return exist(lsDirs(), name);
478 }
479
480 /**
481 * 指定目录下,是否存在文件夹
482 * @param path 目录
483 * @param name 文家夹名称
484 * @return boolean
485 */
486 public boolean existDir(String path,String name){
487 return exist(lsDirs(path), name);
488 }
489
490 /**
491 * 当前工作目录
492 * @return String
493 */
494 public String currentDir(){
495 try {
496 return channel.pwd();
497 } catch (SftpException e) {
498 logger.error("failed to get current dir",e);
499 return homeDir();
500 }
501 }
502
503 /**
504 * 登出
505 */
506 public void logout(){
507 if(channel != null){
508 channel.quit();
509 channel.disconnect();
510 }
511 if(session != null){
512 session.disconnect();
513 }
514 logger.debug("logout successfully");
515 }
516
517
518 //------private method ------
519
520 /** 枚举,用于过滤文件和文件夹 */
521 private enum Filter {/** 文件及文件夹 */ ALL ,/** 文件 */ FILE ,/** 文件夹 */ DIR };
522
523 /**
524 * 列出当前目录下的文件及文件夹
525 * @param filter 过滤参数
526 * @return String[]
527 */
528 @SuppressWarnings("unchecked")
529 private String[] list(Filter filter){
530 Vector<LsEntry> list = null;
531 try {
532 //ls方法会返回两个特殊的目录,当前目录(.)和父目录(..)
533 list = channel.ls(channel.pwd());
534 } catch (SftpException e) {
535 logger.error("can not list directory",e);
536 return new String[0];
537 }
538
539 List<String> resultList = new ArrayList<String>();
540 for(LsEntry entry : list){
541 if(filter(entry, filter)){
542 resultList.add(entry.getFilename());
543 }
544 }
545 return resultList.toArray(new String[0]);
546 }
547
548 /**
549 * 判断是否是否过滤条件
550 * @param entry LsEntry
551 * @param f 过滤参数
552 * @return boolean
553 */
554 private boolean filter(LsEntry entry,Filter f){
555 if(f.equals(Filter.ALL)){
556 return !entry.getFilename().equals(".") && !entry.getFilename().equals("..");
557 } else if(f.equals(Filter.FILE)){
558 return !entry.getFilename().equals(".") && !entry.getFilename().equals("..") && !entry.getAttrs().isDir();
559 } else if(f.equals(Filter.DIR)){
560 return !entry.getFilename().equals(".") && !entry.getFilename().equals("..") && entry.getAttrs().isDir();
561 }
562 return false;
563 }
564
565 /**
566 * 根目录
567 * @return String
568 */
569 private String homeDir(){
570 try {
571 return channel.getHome();
572 } catch (SftpException e) {
573 return "/";
574 }
575 }
576
577 /**
578 * 判断字符串是否存在于数组中
579 * @param strArr 字符串数组
580 * @param str 字符串
581 * @return boolean
582 */
583 private boolean exist(String[] strArr,String str){
584 if(strArr == null || strArr.length == 0){
585 return false;
586 }
587 if(str == null || str.trim().equals("")){
588 return false;
589 }
590 for(String s : strArr){
591 if(s.equalsIgnoreCase(str)){
592 return true;
593 }
594 }
595 return false;
596 }
597
598
599 //------private method ------
600 }
4)测试类
1 import java.io.FileInputStream;
2 import java.io.FileNotFoundException;
3 import java.util.Arrays;
4
5 public class SftpTest {
6 public static void main(String[] args) {
7 // testLogin();
8 // testMakeDir();
9 // testDelFile();
10 // testDelEmptyDir();
11 // testDir();
12 // testLs();
13 // testParamLs();
14 // testChangeDir();
15 // testExist();
16 // testParamExist();
17 // testUploadFile();
18 // testUploadFile2();
19 // testDownload();
20 }
21
22 public static void testLogin(){ //OK
23 Sftp sftp = getSftp();
24
25 sftp.login();
26 sftp.logout();
27 }
28
29 public static void testMakeDir(){ //OK
30 Sftp sftp = getSftp();
31 sftp.login();
32 sftp.makeDir("test2");
33 sftp.changeDir("test2");
34 sftp.makeDir("/test2/test2_1");
35 sftp.logout();
36 }
37
38 public static void testDelFile(){ //OK
39 Sftp sftp = getSftp();
40 sftp.login();
41 sftp.delFile("file1.txt");
42 sftp.logout();
43 }
44
45 public static void testDelEmptyDir(){ //OK
46 Sftp sftp = getSftp();
47 sftp.login();
48 sftp.delDir("test3");
49 sftp.logout();
50 }
51
52 public static void testDir(){ //OK
53 Sftp sftp = getSftp();
54 sftp.login();
55 sftp.delDir("test4");
56 sftp.logout();
57 }
58
59 public static void testLs(){ //OK
60 Sftp sftp = getSftp();
61 sftp.login();
62 System.out.println(Arrays.toString(sftp.ls()));
63 System.out.println(Arrays.toString(sftp.lsFiles()));
64 System.out.println(Arrays.toString(sftp.lsDirs()));
65 sftp.logout();
66 }
67
68 public static void testParamLs(){ //OK
69 Sftp sftp = getSftp();
70 sftp.login();
71 System.out.println(Arrays.toString(sftp.ls("test1/test4")));
72 System.out.println(Arrays.toString(sftp.lsFiles("test1/test4")));
73 System.out.println(Arrays.toString(sftp.lsDirs("test1/test4")));
74 sftp.logout();
75 }
76
77 public static void testChangeDir(){ //OK
78 Sftp sftp = getSftp();
79 sftp.login();
80 sftp.changeDir("test1");
81 sftp.changeDir("/test1/test4");
82 sftp.changeToParentDir();
83 sftp.changeToHomeDir();
84 sftp.logout();
85 }
86
87 public static void testExist(){ //OK
88 Sftp sftp = getSftp();
89 sftp.login();
90 System.out.println(sftp.exist("2fs.docx"));
91 System.out.println(sftp.exist("test1"));
92 System.out.println(sftp.existDir("test2"));
93 System.out.println(sftp.existDir("2sfs.txt"));
94 System.out.println(sftp.existFile("2sfs.txt"));
95 System.out.println(sftp.existFile("test2"));
96 sftp.logout();
97 }
98
99 public static void testParamExist(){ //OK
100 Sftp sftp = getSftp();
101 sftp.login();
102 System.out.println(sftp.exist("test1","test4"));
103 System.out.println(sftp.exist("test1","test_bak.jpg"));
104 System.out.println(sftp.existDir("/test1","test3"));
105 System.out.println(sftp.existDir("/test1","test_bak.jpg"));
106 System.out.println(sftp.existFile("test1","test_bak.jpg"));
107 System.out.println(sftp.existFile("test1","test2"));
108 sftp.logout();
109 }
110
111
112 public static void testUploadFile(){ //OK
113 Sftp sftp = getSftp();
114 sftp.login();
115 sftp.uploadFile("/test1/test3", "test_bak2.jpg", "D:\\test.jpg");
116 try {
117 sftp.uploadFile("/test1/test2", "test_bak3.jpg", new FileInputStream("D:\\test.jpg"));
118 } catch (FileNotFoundException e) {
119 e.printStackTrace();
120 }
121 sftp.logout();
122 }
123
124 public static void testUploadFile2(){ //OK
125 Sftp sftp = getSftp();
126 sftp.login();
127 sftp.uploadFile("test1/test3", "test_bak2.jpg", "D:\\test.jpg");
128 try {
129 sftp.uploadFile("test1/test2", "test_bak3.jpg", new FileInputStream("D:\\test.jpg"));
130 } catch (FileNotFoundException e) {
131 e.printStackTrace();
132 }
133 sftp.logout();
134 }
135
136 public static void testDownload(){ //OK
137 Sftp sftp = getSftp();
138 sftp.login();
139 sftp.downloadFile("test1", "test_bak.jpg", "D:\\testdown");
140 sftp.downloadFile("/", "2fs.docx", "D:\\testdown");
141 sftp.logout();
142 }
143
144 private static Sftp getSftp(){
145
146 String host = "192.168.10.252";
147 int port = 22;
148 int timeout = 60000;
149 String username = "dongliyang";
150 String password = "dongliyang";
151
152 Sftp sftp = new Sftp(host, port, timeout, username, password);
153
154 return sftp;
155 }
156 }