SFtp文件处理
最近工作涉及sftp处理文件,写了个工具类,代码已经测试。请需要的同仁自行下载,根据自己需要,修改加工。附件有参考源码及必要jar包。
package nontax.helper; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpException; /** * 提供SFTP处理文件服务 * @author Tonny * @since Apr.27 2012 * */ public class SFtpHelper { private JSch jSch = null; private ChannelSftp sftp = null;//sftp主服务 private Channel channel = null; private Session session = null; private String hostName="127.0.0.1";//远程服务器地址 private int port=22;//端口 private String userName="Tonny";//用户名 private String password="123";//密码 public SFtpHelper(String hostName, int port, String userName, String password){ this.hostName=hostName; this.port=port; this.userName=userName; this.password=password; } /** * 连接登陆远程服务器 * @return */ public boolean connect() throws Exception{ try { jSch= new JSch(); session = jSch.getSession(userName, hostName, port); session.setPassword(password); session.setConfig(this.getSshConfig()); session.connect(); channel = session.openChannel("sftp"); channel.connect(); sftp = (ChannelSftp) channel; System.out.println("登陆成功:"+sftp.getServerVersion()); } catch (JSchException e) { System.err.println("SSH方式连接FTP服务器时有JSchException异常!"); System.err.println(e.getMessage()); throw e; } return true; } /** * 关闭连接 * @throws Exception */ private void disconnect() throws Exception { try{ if (sftp.isConnected()) { sftp.disconnect(); } if (channel.isConnected()) { channel.disconnect(); } if (session.isConnected()) { session.disconnect(); } }catch(Exception e){ throw e; } } /** * 获取服务配置 * @return */ private Properties getSshConfig()throws Exception{ Properties sshConfig=null; try{ sshConfig = new Properties(); sshConfig.put("StrictHostKeyChecking", "no"); }catch(Exception e){ throw e; } return sshConfig; } /** * 下载远程sftp服务器文件 * @param remotePath * @param remoteFilename * @param localFilename * @return */ public boolean downloadFile(String remotePath, String remoteFilename,String localFilename)throws SftpException, IOException, Exception{ FileOutputStream output = null; boolean success = false; try { if (null != remotePath && remotePath.trim() != "") { sftp.cd(remotePath); } File localFile = new File(localFilename); //有文件和下载文件重名 if (localFile.exists()) { System.err.println("文件: " + localFilename + " 已经存在!"); return success; } output = new FileOutputStream(localFile); sftp.get(remoteFilename, output); success = true; System.out.println("成功接收文件,本地路径:"+localFilename); } catch (SftpException e) { System.err.println("接收文件时有SftpException异常!"); System.err.println(e.getMessage()); return success; } catch (IOException e) { System.err.println("接收文件时有I/O异常!"); System.err.println(e.getMessage()); return success; } finally { try { if (null != output) { output.close(); } //关闭连接 disconnect(); } catch (IOException e) { System.err.println("关闭文件时出错!"); System.err.println(e.getMessage()); } } return success; } /** * 上传文件至远程sftp服务器 * @param remotePath * @param remoteFilename * @param localFileName * @return */ public boolean uploadFile(String remotePath, String remoteFilename, String localFileName)throws SftpException,Exception { boolean success = false; FileInputStream fis=null; try { // 更改服务器目录 if (null != remotePath && remotePath.trim() != "") { sftp.cd(remotePath); } File localFile = new File(localFileName); fis = new FileInputStream(localFile); // 发送文件 sftp.put(fis, remoteFilename); success = true; System.out.println("成功发送文件,本地路径:"+localFileName); } catch (SftpException e) { System.err.println("发送文件时有SftpException异常!"); e.printStackTrace(); System.err.println(e.getMessage()); throw e; } catch (Exception e) { System.err.println("发送文件时有异常!"); System.err.println(e.getMessage()); throw e; } finally { try { if (null != fis) { fis.close(); } //关闭连接 disconnect(); } catch (IOException e) { System.err.println("关闭文件时出错!"); System.err.println(e.getMessage()); } } return success; } /** * 上传文件至远程sftp服务器 * @param remotePath * @param remoteFilename * @param input * @return */ public boolean uploadFile(String remotePath, String remoteFilename, InputStream input)throws SftpException,Exception { boolean success = false; try { // 更改服务器目录 if (null != remotePath && remotePath.trim() != "") { sftp.cd(remotePath); } // 发送文件 sftp.put(input, remoteFilename); success = true; } catch (SftpException e) { System.err.println("发送文件时有SftpException异常!"); e.printStackTrace(); System.err.println(e.getMessage()); throw e; } catch (Exception e) { System.err.println("发送文件时有异常!"); System.err.println(e.getMessage()); throw e; } finally { try { if (null != input) { input.close(); } //关闭连接 disconnect(); } catch (IOException e) { System.err.println("关闭文件时出错!"); System.err.println(e.getMessage()); } } return success; } /** * 删除远程文件 * @param remotePath * @param remoteFilename * @return * @throws Exception */ public boolean deleteFile(String remotePath, String remoteFilename) throws Exception { boolean success = false; try { // 更改服务器目录 if (null != remotePath && remotePath.trim() != "") { sftp.cd(remotePath); } // 删除文件 sftp.rm(remoteFilename); System.err.println("删除远程文件"+remoteFilename+"成功!"); success = true; } catch (SftpException e) { System.err.println("删除文件时有SftpException异常!"); e.printStackTrace(); System.err.println(e.getMessage()); return success; } catch (Exception e) { System.err.println("删除文件时有异常!"); System.err.println(e.getMessage()); return success; } finally { //关闭连接 disconnect(); } return success; } public String getHostName() { return hostName; } public void setHostName(String hostName) { this.hostName = hostName; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } /** *测试方法 * */ public static void main(String [] args){ try{ SFtpHelper sftp=new SFtpHelper("192.168.1.2",22,"ftp","sftp_test"); System.out.println(new StringBuffer().append(" 服务器地址: ").append(sftp.getHostName()).append(" 端口:") .append(sftp.getPort()).append("用户名:").append(sftp.getUserName()).append("密码:") .append(sftp.getPassword().toString())); sftp.connect(); // sftp.downloadFile("\\", "test.txt", "D:\\work\\test.txt"); // sftp.uploadFile("\\", "test.txt", "D:\\work\\readMe.txt"); // sftp.deleteFile("\\", "test.txt"); }catch(Exception e){ System.out.println("异常信息:" + e.getMessage()); } } }
- SFtpHelper.rar (2 KB)
- 下载次数: 29
- jsch-0.1.43.jar (192 KB)
- 下载次数: 25
相关推荐
在这个“Sftp文件上传demo”中,我们将深入探讨如何使用SFTP进行文件上传操作。 首先,我们需要了解SFTP的基本概念。SFTP通过SSH连接建立一个安全通道,用于执行文件管理操作,如上传、下载、重命名和删除文件。与...
首先,为了在C#中实现SFTP文件上传,我们需要一个支持SFTP的库。SharpSSH是一个流行的选择,但现在已被更现代的库如SSH.NET或Renci.SshNet所取代。我们将以Renci.SshNet为例,这是一个强大且易于使用的C# SFTP库。 ...
Java SFTP文件上传是通过Java编程语言实现与Secure File Transfer Protocol(SFTP)服务器进行交互,将本地文件安全地传输到远程服务器的过程。SFTP是一种基于SSH的安全文件传输协议,它提供了在不安全网络上安全...
9. **多线程支持**:FileZilla可以同时处理多个文件传输任务,提高效率。 10. **安全性**:由于使用SFTP协议,所有的文件传输都经过加密,有效防止数据泄露。 总之,SFTP上传下载文件工具如FileZilla,对于需要...
总的来说,C#和Renci.SshNet为开发人员提供了一个强大且灵活的工具集,用于处理SFTP文件操作,同时可以通过回调机制轻松地实现进度监控,提升用户体验。在你的SFTPtest工程中,你可以找到一个完整的示例,包含了编译...