`
一条路一个人
  • 浏览: 26135 次
  • 性别: Icon_minigender_1
  • 来自: 定州市
社区版块
存档分类
最新评论

基于sftp协议的文件传输(jsch实现)

阅读更多

       文件传输在开发中还是经常会遇到的,通常情况会采用ftp协议,java实现ftp协议传输的工具还是有挺多的选择的,比如apache的commons-net工具包。要想程序实现sftp协议或ssh协议的传输文件,也是很容易的,这时用到的就是jcraft的Jsch工具包了。

       如果项目采用maven构建的话,引入

 

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.50</version>
</dependency>

 使用的情况:服务器是linux系统,我们需要将我们的文件上传到指定的目录下,使用ssh2协议或sftp协议。

 

代码示列:

import java.util.Properties;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

/**
 * @ClassName: JschSFTP
 * @Description: sftp文件传输工具类
 * @author lipenglong
 * @date 2013-12-13 下午4:50
 */
public class JschSFTP {
	
    private Session session = null;
    private Channel channel = null;

    private String sftpHost;
    private int sftpPort;
    private String sftpUserName;
    private String sftpPassword;
    private int timeout;

    public void setSftpHost(String sftpHost) {
        this.sftpHost = sftpHost;
    }

    public void setSftpPort(int sftpPort) {
        this.sftpPort = sftpPort;
    }

    public void setSftpUserName(String sftpUserName) {
        this.sftpUserName = sftpUserName;
    }

    public void setSftpPassword(String sftpPassword) {
        this.sftpPassword = sftpPassword;
    }

    public void setTimeout(int timeout) {
        this.timeout = timeout;
    }

    /**
     * 获取连接
     * @return
     */
    private ChannelSftp getChannelSftp() {
        try {
            if (channel != null && channel.isConnected()) {
                return (ChannelSftp) channel;
            }
            JSch jSch = new JSch();
			if (session == null || !session.isConnected()) {
				session = jSch.getSession(sftpUserName, sftpHost, sftpPort);
				session.setPassword(sftpPassword);
				Properties config = new Properties();
				config.put("StrictHostKeyChecking", "no");
				session.setConfig(config);
				session.setTimeout(timeout);
				session.connect();
			}
			channel = session.openChannel("sftp");
			channel.connect();
		} catch (Exception e) {
            Log4jUtil.CommonLog.error(e.getMessage(), e);
			if (session != null) {
				session.disconnect();
				session = null;
			}
			channel = null;
		}
		return channel == null ? null : (ChannelSftp) channel;
	}

    /**
     * 关闭连接
     */
	public void closeChannel() {
		try {
			if (channel != null) {
				channel.disconnect();
				channel = null;
			}
			if (session != null) {
				session.disconnect();
				session = null;
			}
		} catch (Exception e) {
            Log4jUtil.CommonLog.error(e.getMessage(), e);
		}
	}

    /**
     * 文件上传
     * @param src 源文件absolutePath
     * @param dst 目标文件名
     * @param dir 目标文件路径
     * @return boolean
     */
	public boolean uploadFile(String src, String dst, String dir) {
		boolean flag = false;
		ChannelSftp channelSftp = getChannelSftp();
		if (channelSftp == null) {
			return false;
		}
		try {
			channelSftp.cd(dir);
			channelSftp.put(src, dst, ChannelSftp.OVERWRITE);
			flag = true;
		} catch (Exception e) {
			flag = false;
            Log4jUtil.CommonLog.error(e.getMessage(), e);
		}
		return flag;
	}

    /**
     * 重命名
     * @param oldName 旧文件名
     * @param newName 新文件名
     * @param dir 文件所在路径
     * @return boolean
     */
	public boolean renameTmpFile(String oldName, String newName, String dir) {
		boolean flag = false;
		ChannelSftp channelSftp = getChannelSftp();
		if (channelSftp == null) {
			return false;
		}
		try {
			channelSftp.cd(dir);
			channelSftp.rename(oldName, newName);
			flag = true;
		} catch (SftpException e) {
			flag = false;
            Log4jUtil.CommonLog.error(e.getMessage(), e);
			try {
				channelSftp.rm(newName);
			} catch (SftpException e1) {
				
			}
		}
		return flag;
	}
}

 

 我曾写过的一个程序情况:把一个数据包**.rar上传到服务器(如/var/data/),文件大小不一定,上传中文件为"/var/data/**.rar.tmp"上传成功后去掉“.tmp",这两个方法就可以实现了~

 

配置参数可通过spring的注入,例如

sftpHost:192.168.1.**

sftpPort:22

sftpUserName:root(当然通常不会用root用户的)

sftpPassword:***(只有自己知道了~)

timeout:30000

分享到:
评论

相关推荐

    基于SSH协议的sftp协议

    该类使用JSch库来实现SFTP协议的连接和文件传输,提供了一个基本的SFTP客户端实现。 SFTP协议的主要特点包括: * 安全性:SFTP协议使用SSH协议提供的加密机制,确保文件传输的安全性。 * 可靠性:SFTP协议提供了...

    详解Java使用Jsch与sftp服务器实现ssh免密登录

    ChannelSftp类是JSch实现SFTP的核心类,它封装了SFTP协议的所有操作方法。例如,put()用于文件上传,get()用于文件下载,cd()用于进入指定目录,ls()用于获取指定目录下的文件列表,rename()用于重命名文件等。利用...

    java实现ftp、sftp的文件上传和下载

    SFTP则基于SSH协议,提供了安全的文件传输方式。Java中可以使用JSch库来实现SFTP操作。JSch是一个纯Java实现的SSH2库,支持SFTP。使用JSch时,需要先建立SSH连接,然后打开一个SFTP会话。文件操作的接口封装在`...

    java操作sftp的工具类(JSch)

    SFTP是一种在不安全的网络上安全传输文件的协议,它基于SSH(Secure Shell)协议,提供了数据加密和身份验证功能。Java中没有内置对SFTP的支持,因此需要借助像JSch这样的库来实现。 JSch库的使用步骤大致包括以下...

    java版SFTP实现示例(使用jsch)

    在Java编程环境中,有时我们需要与远程服务器进行文件传输,这时SFTP(Secure File Transfer Protocol,安全文件传输协议...这个过程涉及的主要知识点包括:SSH协议、SFTP协议、JSch库的使用、Java I/O流以及异常处理。

    SFTP下载(JSch可跨服务器)

    SFTP(Secure File Transfer Protocol)是一种安全的网络协议,用于在不同主机之间传输文件,它基于SSH(Secure Shell)协议,提供了数据加密和身份验证功能,确保了文件传输过程中的安全性。JSch是一个Java实现的...

    使用jsch中的ChannelSftp上传文件和文件夹[参考].pdf

    ChannelSftp 是 JSCH 中的一个实现 SFTP 协议的 Channel,提供了文件传输、文件管理等功能。 在本文中,我们将详细介绍如何使用 JSCH 中的 ChannelSftp 上传文件和文件夹。 ### SFTP 协议简介 SFTP(Secure File...

    JSch - Java实现的SFTP(文件下载详解篇)

    SFTP是一种基于SSH协议的安全文件传输协议,它为数据传输提供加密保护。本文将详细介绍如何利用JSch库实现在Java应用程序中进行文件下载的功能,并介绍相关的辅助方法。 #### JSch 库简介 JSch 是一个纯Java实现的...

    SFTP例子和jsch-0.1.44.jar

    SFTP(Secure File Transfer Protocol)是一种安全的网络协议,用于在不同主机之间传输文件,它基于SSH(Secure Shell)协议,提供了数据加密和身份验证功能,确保了文件传输过程中的安全性。JSch(Java Secure ...

    JSch - Java实现的SFTP(文件上传/下载详解篇)

    JSch库为Java开发者提供了一个简单且强大的工具,用于实现SFTP协议,使得在Java程序中安全地处理远程文件变得更加容易。无论是上传还是下载文件,只要按照上述步骤和方法,都能实现高效且安全的SFTP操作。在开发过程...

    SFTP連接所用到的jsch.jar包

    JSch是Java Secure Channel的一个开源实现,它提供了一个方便的API来连接SSH2协议(SFTP是基于SSH2的子协议)的服务器。 JSch库的核心功能包括: 1. **建立SFTP连接**:JSch库允许开发者通过提供主机名、端口号、...

    jsch-0.1.42.jar及用java实现SFTP的例子

    5. **SCP支持**:除了SFTP,JSch还支持SCP(Secure Copy),另一种基于SSH的文件传输协议。 SCP通常用于在命令行中复制文件,而JSch库则提供了在Java程序中实现SCP功能的能力。 **使用JSch实现SFTP** 要使用JSch...

    SFTP资料及JAR包

    SFTP(Secure File Transfer Protocol)是一种基于SSH2协议的安全文件传输协议,用于在不同网络之间安全地传输文件。它确保了数据的完整性,通过加密连接防止未经授权的访问和窃听。在Java中,我们可以利用开源库...

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

    【标题】"SFTP定时扫描本地文件上传到Linux服务器"涉及的关键知识点主要集中在SFTP(Secure File Transfer Protocol)协议的使用、...通过这个项目,开发者可以提升在这些领域的能力,实现高效、安全的文件传输自动化。

    java实现sftp客户端上传文件以及文件夹的功能

    首先,SFTP是一种基于SSH的安全文件传输协议,它提供了在不安全网络上安全传输文件的能力。在Java中,我们通常使用JSch库来实现SFTP功能。JSch是一个纯Java实现的SSH2库,支持SCP、SFTP和SSH命令。 1. **JSch库**:...

    java sftp文件上传

    SFTP是一种基于SSH的安全文件传输协议,它提供了在不安全网络上安全传输文件的能力。下面将详细介绍Java实现SFTP文件上传的相关知识点。 首先,你需要一个支持SFTP的Java库。Java本身并不内置SFTP功能,但我们可以...

    java通过sftp模式实现FTP的文件上传下载删除功能

    在Java编程中,SFTP(Secure File Transfer Protocol)是一种安全的文件传输协议,它基于SSH(Secure Shell)来提供服务,常用于在不同系统间安全地传输文件。本篇文章将详细探讨如何使用Java通过SFTP模式实现FTP的...

    sftp源码sftp源码sftp源码

    总结,SFTP作为安全的文件传输协议,其源码实现涵盖了SSH连接管理、SFTP会话交互、文件操作和加密等多个方面。开发者可以通过学习相关开源库的源码,深入了解其工作原理,并在自己的项目中实现SFTP功能。

Global site tag (gtag.js) - Google Analytics