基于JSch的Sftp工具类

时间:2022-09-22 03:42:50

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)构造方法摘要

Sftp(String host,
int port, int timeout, String username, String password)

参数:

host - SFTP服务器IP地址

port - SFTP服务器端口

timeout - 连接超时时间,单位毫秒

username - 用户名

password - 密码

 

 

 

 

 

 

 

 

 

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,
String localFile)
 
          上传文件

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3)源代码

基于JSch的Sftp工具类
  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 }
基于JSch的Sftp工具类

 

4)测试类

基于JSch的Sftp工具类
  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 }
基于JSch的Sftp工具类