基于JSch的Sftp工具类

本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)源代码

  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 }
时间: 2024-10-12 08:29:22

基于JSch的Sftp工具类的相关文章

Java 基于log4j的日志工具类

Java 基于log4j的日志工具类 对log4j日志类进行了简单封装,使用该封装类的优势在于以下两点: 1.不必在每个类中去创建对象,直接类名 + 方法即可 2.可以很方便的打印出堆栈信息 package com.tradeplatform.receiveorder.util; import java.io.PrintWriter; import java.io.StringWriter; import org.apache.log4j.Logger; /** * @Description 日

基于protostuff的序列化工具类开发

[toc] 基于protostuff的序列化工具类开发 前言 前面在介绍protostuff的基本使用时(可以参考文章protostuff基本使用),都是针对某个类写的序列化和反序列化方法,显然这样不具有通用性,例如在进行远程过程调用时,传输的对象并不唯一,这时就需要开发具有通用性的序列化工具类,即不管序列化的对象是什么类型,都可以使用该工具类进行序列化.下面就来开发这样的工具类. 基于这个需要,下面会开发两个序列化工具类,一个是不具有缓存功能的SerializationUtil,一个是具有缓存

SFTP工具类

需要导入jsch-0.1.52.jar 1 import java.io.File; 2 import java.io.FileInputStream; 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.io.InputStream; 6 import java.util.ArrayList; 7 import java.util.Iterator; 8 import java.util.

基于durid的JDBCUtils工具类

1.JDBCUtils类 package com.alphajuns.utils; import com.alibaba.druid.pool.DruidDataSourceFactory; import javax.sql.DataSource; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.

使用JSch实现SFTP文件传输

1.JSch开发包下载 http://www.jcraft.com/jsch/ 目前最新版本为:jsch-0.1.51 2.简单例子,列出指定目录下的文件列表 import java.util.Properties; import java.util.Vector; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; public class Demo00

org.tinygroup.commons-常用工具类

org.tinygroup.commons提供了各方面的静态类封装,是一个常用工具集合工程.下面列举一些常用的工具类: 类名 说明 BeanUtil 提供对Bean对象的参数提取/深度克隆等公用方法.                                  LocaleUtil 用来处理地域和字符编码的工具类.                                  StreamUtil 基于流的静态工具类.                                 

基于jdk1.7实现的excel导出工具类

工具类基于jdk1.7 反射特性实现 1.7反射重度依赖于hashmap package com.xx.common.utils; import java.io.*;import java.lang.reflect.Field;import java.text.SimpleDateFormat;import java.util.*;import org.apache.poi.hssf.usermodel.*;import org.slf4j.Logger;import org.slf4j.Log

JS 日期工具类-基于yDate

源码下载 前言:最近在用到JS日期操作时,发现有一些不方便,于是搜素了一些网上的资料,基于一个开源工具类-yDate 进行了个性化定制,封装成了一个日期工具类工具函数大概介绍:1.普通的日期操作2. 获得一些绝对时间,如1970年 到现在的绝对年,月份,日期,描述,毫秒数等等3. 日期比较,克隆,开始时间,结束时间,字符串(输出时可以自定义格式)输出等4. 日期相加,相减(返回一个新的日期对象), 比如1月31日 1天会自动变为 2月1日等等5. 简化构造,可以传入字符串进行构造等等6. 更多请

分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!

using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Caching; using System.Text; using System.Threading.Tasks; namespace AutoLogisticsPH.Common.Utils { /// <summary> /// 基于MemoryCache(内存缓存)的缓存工具类 /// Author:左文俊 ///