`
forkeeps
  • 浏览: 1007 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

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());
		}
	}
}
 

 

分享到:
评论

相关推荐

    Sftp文件上传demo

    在这个“Sftp文件上传demo”中,我们将深入探讨如何使用SFTP进行文件上传操作。 首先,我们需要了解SFTP的基本概念。SFTP通过SSH连接建立一个安全通道,用于执行文件管理操作,如上传、下载、重命名和删除文件。与...

    C#实现SFTP 文件上传

    首先,为了在C#中实现SFTP文件上传,我们需要一个支持SFTP的库。SharpSSH是一个流行的选择,但现在已被更现代的库如SSH.NET或Renci.SshNet所取代。我们将以Renci.SshNet为例,这是一个强大且易于使用的C# SFTP库。 ...

    C#实现SFTP文件上传和下载,有进度条

    总的来说,C#和Renci.SshNet为开发人员提供了一个强大且灵活的工具集,用于处理SFTP文件操作,同时可以通过回调机制轻松地实现进度监控,提升用户体验。在你的SFTPtest工程中,你可以找到一个完整的示例,包含了编译...

    java sftp文件上传

    Java SFTP文件上传是通过Java编程语言实现与Secure File Transfer Protocol(SFTP)服务器进行交互,将本地文件安全地传输到远程服务器的过程。SFTP是一种基于SSH的安全文件传输协议,它提供了在不安全网络上安全...

    C#sftp实现对文件的操作

    总结起来,C#通过SSH.NET库可以轻松实现SFTP文件操作,包括连接、上传、下载、删除和移动文件。在开发涉及SFTP的C#应用时,理解这些基本操作是至关重要的。同时,为用户提供友好的图形界面,如"formClient",可以...

    SFTP上传下载文件工具

    9. **多线程支持**:FileZilla可以同时处理多个文件传输任务,提高效率。 10. **安全性**:由于使用SFTP协议,所有的文件传输都经过加密,有效防止数据泄露。 总之,SFTP上传下载文件工具如FileZilla,对于需要...

    windows的sftp文件管理服务器

    标题"windows的sftp文件管理服务器"所涉及的关键知识点包括: 1. **SFTP**:SFTP是FTP的一个安全版本,它不使用单独的控制和数据通道,而是将所有通信都通过一个加密的SSH连接进行。这样可以防止中间人攻击和窃听,...

    基于QSSH的sftp文件管理器 源代码

    【标题】基于QSSH的sftp文件管理器 源代码 在IT行业中,文件管理是日常工作中不可或缺的一部分,尤其是在远程服务器操作时。SFTP(Secure File Transfer Protocol)是一种安全的网络协议,用于在不安全的网络环境中...

    bat脚本使用Putty工具sftp上传文件.zip

    `Putty`是一款广受欢迎的SSH客户端,它包含多个组件,如plink、psftp、pscp等,分别用于命令行连接、SFTP文件传输和文件复制等功能。`psftp.exe`是其中的SFTP客户端,支持在命令行环境中执行上传、下载等操作。 要...

    Windows平台c++对ftp/sftp文件和文件夹下载上传工程源代码

    总结,这个Windows平台的C++ FTP/SFTP文件和文件夹下载上传工程源代码项目,提供了完整的客户端功能,利用LibSSH2库实现了安全的文件传输,并经过了严格的测试,是开发人员进行相关功能开发的一个宝贵资源。

    JavaSFTP上传文件

    下面我们将详细探讨如何使用Java通过JSch库实现SFTP文件的上传和下载。 ### 1. JSch库介绍 JSch是Java的一个库,它实现了SSH2协议,包括SFTP子协议。它允许开发者在Java应用程序中实现安全的远程登录、文件传输等...

    SFTP定时扫描本地文件上传到Linux服务器

    【标题】"SFTP定时扫描本地文件上传到Linux服务器"涉及的关键知识点主要集中在SFTP(Secure File Transfer Protocol)协议的使用、文件系统的监控以及自动化任务的执行。SFTP是一种安全的网络协议,用于在不同主机...

    FTP与SFTP文件上传Demo

    在"FTP与SFTP文件上传Demo"中,我们可以假设你已经编写或配置了FTP和SFTP的上传代码示例。FtpDemo可能包含了一个或多个程序,这些程序演示了如何使用编程语言(如Java、Python、C#等)连接到FTP或SFTP服务器,并执行...

    Java sftp上传文件夹demo

    在Java编程中,SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,常用于在本地系统和远程服务器之间安全地传输文件。JSch(Java Secure Channel)是一个开放源码的Java库,它实现了SSH2协议,包括...

    c# .net sftp上传文件

    本项目显然旨在演示如何使用C# .NET实现SFTP文件上传功能。以下是对这一主题的详细说明: 1. **SFTP协议**: SFTP是SSH文件传输协议,不同于FTP,它提供加密的文件传输服务,保护数据免受中间人攻击和窃听。SFTP...

    C# SFTP上传下载文件

    这里推荐使用Renci.SshNet库,它提供了易于使用的API来处理SFTP连接、文件上传和下载。要使用这个库,你需要在项目中添加对Renci.SshNet的引用。你可以通过NuGet包管理器安装,命令为:`Install-Package Renci....

    java代码sftp和ftp上传下载文件

    以上就是使用Java进行FTP和SFTP文件上传下载的基本方法。在实际项目中,可能需要对错误处理、连接超时、重试机制等方面进行优化,以确保文件传输的稳定性和可靠性。同时,根据具体需求,还可以扩展为支持批量上传...

    pb8.0利用psftp.exe进行sftp上传下载

    在IT行业中,Secure File Transfer Protocol (SFTP) 是一种安全的网络协议,用于在不同主机之间传输文件。本文将深入探讨如何在PowerBuilder 8.0(简称PB8.0)环境中利用psftp.exe工具进行SFTP的上传与下载操作。 *...

    sftp上传下载文件的Java代码

    下面是一个基本的SFTP文件上传和下载的Java代码示例: ```java import com.jcraft.jsch.*; public class SftpExample { public static void main(String[] args) { try { // 创建JSch实例 JSch jsch = new ...

Global site tag (gtag.js) - Google Analytics