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.List;
  9 import java.util.Properties;
 10 import java.util.Vector;
 11
 12 import com.jcraft.jsch.Channel;
 13 import com.jcraft.jsch.ChannelSftp;
 14 import com.jcraft.jsch.ChannelSftp.LsEntry;
 15 import com.jcraft.jsch.JSch;
 16 import com.jcraft.jsch.JSchException;
 17 import com.jcraft.jsch.Session;
 18 import com.jcraft.jsch.SftpException;
 19
 20 /**
 21  * 提供SFTP处理文件服务
 22  *
 23  * @author krm-hehongtao
 24  * @date 2016-02-29
 25  *
 26  */
 27 public class SFTPUtil {
 28     private JSch jSch = null;
 29     private ChannelSftp sftp = null;// sftp主服务
 30     private Channel channel = null;
 31     private Session session = null;
 32
 33     private String hostName = "192.168.0.177";// 远程服务器地址
 34     private int port = 22;// 端口
 35     private String userName = "weblogic";// 用户名
 36     private String password = "weblogic";// 密码
 37
 38     public SFTPUtil(String hostName, int port, String userName, String password) {
 39         this.hostName = hostName;
 40         this.port = port;
 41         this.userName = userName;
 42         this.password = password;
 43     }
 44
 45     /**
 46      * 连接登陆远程服务器
 47      *
 48      * @return
 49      */
 50     public boolean connect() throws Exception {
 51         try {
 52             jSch = new JSch();
 53             session = jSch.getSession(userName, hostName, port);
 54             session.setPassword(password);
 55
 56             session.setConfig(this.getSshConfig());
 57             session.connect();
 58
 59             channel = session.openChannel("sftp");
 60             channel.connect();
 61
 62             sftp = (ChannelSftp) channel;
 63             System.out.println("登陆成功:" + sftp.getServerVersion());
 64
 65         } catch (JSchException e) {
 66             System.err.println("SSH方式连接FTP服务器时有JSchException异常!");
 67             System.err.println(e.getMessage());
 68             throw e;
 69         }
 70         return true;
 71     }
 72
 73     /**
 74      * 关闭连接
 75      *
 76      * @throws Exception
 77      */
 78     private void disconnect() throws Exception {
 79         try {
 80             if (sftp.isConnected()) {
 81                 sftp.disconnect();
 82             }
 83             if (channel.isConnected()) {
 84                 channel.disconnect();
 85             }
 86             if (session.isConnected()) {
 87                 session.disconnect();
 88             }
 89         } catch (Exception e) {
 90             throw e;
 91         }
 92     }
 93
 94     /**
 95      * 获取服务配置
 96      *
 97      * @return
 98      */
 99     private Properties getSshConfig() throws Exception {
100         Properties sshConfig = null;
101         try {
102             sshConfig = new Properties();
103             sshConfig.put("StrictHostKeyChecking", "no");
104
105         } catch (Exception e) {
106             throw e;
107         }
108         return sshConfig;
109     }
110
111     /**
112      * 下载远程sftp服务器文件
113      *
114      * @param remotePath
115      * @param remoteFilename
116      * @param localFilename
117      * @return
118      */
119     public boolean downloadFile(String remotePath, String remoteFilename, String localFilename)
120             throws SftpException, IOException, Exception {
121         FileOutputStream output = null;
122         boolean success = false;
123         try {
124             if (null != remotePath && remotePath.trim() != "") {
125                 sftp.cd(remotePath);
126             }
127
128             File localFile = new File(localFilename);
129             // 有文件和下载文件重名
130             if (localFile.exists()) {
131                 System.err.println("文件: " + localFilename + " 已经存在!");
132                 return success;
133             }
134             output = new FileOutputStream(localFile);
135             sftp.get(remoteFilename, output);
136             success = true;
137             System.out.println("成功接收文件,本地路径:" + localFilename);
138         } catch (SftpException e) {
139             System.err.println("接收文件时有SftpException异常!");
140             System.err.println(e.getMessage());
141             return success;
142         } catch (IOException e) {
143             System.err.println("接收文件时有I/O异常!");
144             System.err.println(e.getMessage());
145             return success;
146         } finally {
147             try {
148                 if (null != output) {
149                     output.close();
150                 }
151                 // 关闭连接
152                 disconnect();
153             } catch (IOException e) {
154                 System.err.println("关闭文件时出错!");
155                 System.err.println(e.getMessage());
156             }
157         }
158         return success;
159     }
160
161     /**
162      * 上传文件至远程sftp服务器
163      *
164      * @param remotePath
165      * @param remoteFilename
166      * @param localFileName
167      * @return
168      */
169     public boolean uploadFile(String remotePath, String remoteFilename, String localFileName)
170             throws SftpException, Exception {
171         boolean success = false;
172         FileInputStream fis = null;
173         try {
174             // 更改服务器目录
175             if (null != remotePath && remotePath.trim() != "") {
176                 sftp.cd(remotePath);
177             }
178             File localFile = new File(localFileName);
179             fis = new FileInputStream(localFile);
180             // 发送文件
181             sftp.put(fis, remoteFilename);
182             success = true;
183             System.out.println("成功发送文件,本地路径:" + localFileName);
184         } catch (SftpException e) {
185             System.err.println("发送文件时有SftpException异常!");
186             e.printStackTrace();
187             System.err.println(e.getMessage());
188             throw e;
189         } catch (Exception e) {
190             System.err.println("发送文件时有异常!");
191             System.err.println(e.getMessage());
192             throw e;
193         } finally {
194             try {
195                 if (null != fis) {
196                     fis.close();
197                 }
198                 // 关闭连接
199                 disconnect();
200             } catch (IOException e) {
201                 System.err.println("关闭文件时出错!");
202                 System.err.println(e.getMessage());
203             }
204         }
205         return success;
206     }
207
208     /**
209      * 上传文件至远程sftp服务器
210      *
211      * @param remotePath
212      * @param remoteFilename
213      * @param input
214      * @return
215      */
216     public boolean uploadFile(String remotePath, String remoteFilename, InputStream input)
217             throws SftpException, Exception {
218         boolean success = false;
219         try {
220             // 更改服务器目录
221             if (null != remotePath && remotePath.trim() != "") {
222                 sftp.cd(remotePath);
223             }
224
225             // 发送文件
226             sftp.put(input, remoteFilename);
227             success = true;
228         } catch (SftpException e) {
229             System.err.println("发送文件时有SftpException异常!");
230             e.printStackTrace();
231             System.err.println(e.getMessage());
232             throw e;
233         } catch (Exception e) {
234             System.err.println("发送文件时有异常!");
235             System.err.println(e.getMessage());
236             throw e;
237         } finally {
238             try {
239                 if (null != input) {
240                     input.close();
241                 }
242                 // 关闭连接
243                 disconnect();
244             } catch (IOException e) {
245                 System.err.println("关闭文件时出错!");
246                 System.err.println(e.getMessage());
247             }
248
249         }
250         return success;
251     }
252
253     /**
254      * 删除远程文件
255      *
256      * @param remotePath
257      * @param remoteFilename
258      * @return
259      * @throws Exception
260      */
261     public boolean deleteFile(String remotePath, String remoteFilename) throws Exception {
262         boolean success = false;
263         try {
264             // 更改服务器目录
265             if (null != remotePath && remotePath.trim() != "") {
266                 sftp.cd(remotePath);
267             }
268
269             // 删除文件
270             sftp.rm(remoteFilename);
271             System.err.println("删除远程文件" + remoteFilename + "成功!");
272             success = true;
273         } catch (SftpException e) {
274             System.err.println("删除文件时有SftpException异常!");
275             e.printStackTrace();
276             System.err.println(e.getMessage());
277             return success;
278         } catch (Exception e) {
279             System.err.println("删除文件时有异常!");
280             System.err.println(e.getMessage());
281             return success;
282         } finally {
283             // 关闭连接
284             disconnect();
285         }
286         return success;
287     }
288
289     /**
290      * 遍历远程文件
291      *
292      * @param remotePath
293      * @return
294      * @throws Exception
295      */
296     public List<String> listFiles(String remotePath) throws SftpException {
297         List<String> ftpFileNameList = new ArrayList<String>();
298         Vector<LsEntry> sftpFile = sftp.ls(remotePath);
299         LsEntry isEntity = null;
300         String fileName = null;
301         Iterator<LsEntry> sftpFileNames = sftpFile.iterator();
302         while (sftpFileNames.hasNext()) {
303             isEntity = (LsEntry) sftpFileNames.next();
304             fileName = isEntity.getFilename();
305             System.out.println(fileName);
306             ftpFileNameList.add(fileName);
307         }
308         return ftpFileNameList;
309     }
310
311     /**
312      * 判断路径是否存在
313      *
314      * @param remotePath
315      * @return
316      * @throws SftpException
317      */
318     public boolean isExist(String remotePath) throws SftpException {
319         boolean flag = false;
320         try {
321             sftp.cd(remotePath);
322             System.out.println("存在路径:" + remotePath);
323             flag = true;
324         } catch (SftpException sException) {
325
326         } catch (Exception Exception) {
327         }
328         return flag;
329     }
330
331     public String getHostName() {
332         return hostName;
333     }
334
335     public void setHostName(String hostName) {
336         this.hostName = hostName;
337     }
338
339     public int getPort() {
340         return port;
341     }
342
343     public void setPort(int port) {
344         this.port = port;
345     }
346
347     public String getUserName() {
348         return userName;
349     }
350
351     public void setUserName(String userName) {
352         this.userName = userName;
353     }
354
355     public String getPassword() {
356         return password;
357     }
358
359     public void setPassword(String password) {
360         this.password = password;
361     }
362
363     /**
364      * 测试方法
365      *
366      */
367     public static void main(String[] args) {
368         try {
369             SFTPUtil sftp = new SFTPUtil("192.168.0.177", 22, "weblogic", "weblogic");
370             System.out.println(new StringBuffer().append(" 服务器地址: ")
371                     .append(sftp.getHostName()).append(" 端口:").append(sftp.getPort())
372                     .append("用户名:").append(sftp.getUserName()).append("密码:")
373                     .append(sftp.getPassword().toString()));
374             sftp.connect();
375             if (sftp.isExist("/home/weblogic/project")) {
376                 sftp.listFiles("/home/weblogic/project");
377                 sftp.downloadFile("/home/weblogic/project", "S123456_20150126.csv",
378                         "D:\\S123456_20150126.csv");
379                 // sftp.uploadFile("\\", "test.txt", "D:\\work\\readMe.txt");
380                 // sftp.deleteFile("\\", "test.txt");
381             }
382         } catch (Exception e) {
383             System.out.println("异常信息:" + e.getMessage());
384         }
385     }
386 }
时间: 2024-11-29 03:10:26

SFTP工具类的相关文章

基于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)           切换工作目

.net使用正则表达式校验、匹配字符工具类

开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: 1 /// <summary> 2 /// 字符(串)验证.匹配工具类 3 /// </summary> 4 public class ValidatorTools 5 { 6 #region 匹配方法 7 /// <summary> 8 /// 验证字符串是否匹配正则表达式描述的规则 9 /// </summary> 10 /// <param name="inputStr&

Arrays工具类

Arraysd的静态方法能够方便的对数组进行操作,每个方法也加了注释 : 程序: import java.util.*;public class Array{        public static void main(String[] args){                int[]  arr={1,3,4,2};                System.out.println("排序前:");                printArray(arr);//打印原数组

常用工具类(System,Runtime,Date,Calendar,Math)

一.Sy 一个java.lang包中的静态工具类. 三大字段: static PrintStream err "标准"错误输出流. static InputStream in "标准"输入流. static PrintStream out "标准"输出流. 其他常用方法: 描述系统信息: 获取系统属性信息: static Properties getProperties(): (Properties是Hashtable的子类,也就是Map 的子类

iOS 中的正则匹配(工具类)

正则表达式 正则表达式是对字符串操作的一种逻辑公式, 用事先定义好的一些特定字符.及这些特定字符的组合, 组成一个"规则字符串", 这个"规则字符串"用来表达对字符串的一种过滤逻辑, 正则表达式就是用于描述这些规则的工具, 或者说, 正则表达式就是记录文本规则的代码. 在开发中, 我们经常会有查找符合某些复杂规则的字符串的需要, 比如数据校验: 判断用户的输入是否合法(如:用户注册的时候,QQ号码,电话号码,邮箱是否符合要求) 下面让我们先来看看正则匹配常用的一些字

(九十五)音效播放方法和工具类的制作

音效通过AVFoundation框架实现,是通过函数而不是方法,因此需要进行桥接等操作,具体步骤如下. 进行音效播放,首先要得到音效的URL(只能是本地音频),然后转换为音效ID(唯一),通过ID播放音效. [音效播放方法] ①导入框架主头文件 #import <AVFoundation/AVFoundation.h> ②通过Bundle拿到本地音效,然后调用AudioServicesCreateSystemSoundID函数得到音效ID,ID为0代表无效,以此为依据可进行懒加载 @inter

spring endpoint工具类

工具类代码 @Controller public class EndpointDocController {     private final RequestMappingHandlerMapping handlerMapping;     @Autowired     public EndpointDocController(RequestMappingHandlerMapping handlerMapping) {         this.handlerMapping = handler

web常用的工具类总结

数据库的链接的操作类 package utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBConnection { private static final String DBDRIVER = "com.m

字符串工具类(指定字符串的长度和判断是否为空等方法)

package com.sec.util; /** * 字符串工具类 * @author Administrator * */public class StringUtil { /** * 过滤<,>,\n 字符串的方法 * @param input * @return */ public static String filterHTML(String input){ if(input == null || input.length() == 0){ return input; } input