使用jsch实现SFTP文件传输

1、环境搭建
这里使用maven管理项目,所以第一步需要先导入相关的依赖,第一步:安装vsftpd提供ftp服务(注意跟xftp不同,协议与端口都不同)

    <!-- https://mvnrepository.com/artifact/com.jcraft/jsch -->
    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.53</version>
    </dependency>

2、简单例子,列出指定目录下的文件列表

/**
     * 列出目录下的文件
     * 
     * @param directory
     *            要列出的目录
     * @paramsftp
     * @return
     * @throwsSftpException
     */
    publicVectorlistFiles(String directory, ChannelSftpsftp) throwsSftpException {
        returnsftp.ls(directory);
    }

3、JSch实现SFTP功能一些主要类的介绍

1)JSch 类

2)Session 会话对象类

3)ChannelSFTP类
ChannelSFTP类是JSch实现SFTP核心类,它提供了一些SFTP常见的操作方法,如下

方法名 方法说明
put()       文件上传
get()   文件下载
cd()    进入指定目录
ls()    得到指定目录下的文件列表
rename()    重命名(移动)指定文件或目录
rm()    删除指定文件
mkdir()     创建目录
rmdir()     删除目录(只允许删除空目录)

注:以上这些方法都有很多重载方法

4)SftpProgressMonitor 传输进度监控类

5)LsEntry 可以认为是文件服务器上的文件条目信息,把包含文件或者目录相关属性 。ls命令返回的Vector中的就是LsEntry对象列表

4、SFTP文件传输的实现步骤

/**
     * 上传文件
     * 
     * @param directory
     *            上传的目录
     * @paramuploadFile
     *            要上传的文件
     * @paramsftp
     */
    publicvoid upload(String directory, String uploadFile, ChannelSftpsftp) {
        try {
            sftp.cd(directory);
            File file = new File(uploadFile);
            sftp.put(newFileInputStream(file), file.getName());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

5、JSch中文乱码处理

使用jsch-0.1.51进行SFTP文件传输时,对中文处理会出现乱码,并且也无法通过setFileNameEncoding()方法来设置编码。
解决方案:
下载jsch-0.1.51源代码,在ChannelSFTP.java文件中找到SENDINIT( )方法,修改红色部分的内容

           private void sendINIT() throws Exception {
    this.packet.reset();
    putHEAD((byte)1, 5);
    this.buf.putInt(3);   //修改为  this.buf.putInt(2);
    getSession().write(this.packet, this, 9);
  }

然后编译并更改jar中的对应class文件即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值