sftp api java_SFTP例子2----使用JSch实现SFTP文件传输

本文档提供了一个使用JSch库在Java中实现SFTP文件传输的示例。首先介绍了JSch开发包的下载,然后展示了一个简单的Java程序,用于连接到SFTP服务器,列出目录文件,进行文件传输并处理中文乱码问题。还概述了JSch中涉及的主要类,如JSch、Session和ChannelSFTP,并解释了它们的功能和常用方法。
摘要由CSDN通过智能技术生成

1、JSch开发包下载

目前最新版本为:jsch-0.1.51

2、简单例子,列出指定目录下的文件列表import java.util.Properties;

import java.util.Vector;

import com.jcraft.jsch.ChannelSftp;

import com.jcraft.jsch.JSch;

import com.jcraft.jsch.Session;

public class Demo003 {

/**

* @param args

*/

public static void main(String[] args) throws Exception{

JSch jsch = new JSch();

Session session = jsch.getSession("cmb", "localhost");

session.setPassword("cmb123");

Properties config = new Properties();

config.put("StrictHostKeyChecking", "no");

session.setConfig(config);

session.connect();

ChannelSftp channelSftp = (ChannelSftp)session.openChannel("sftp");

channelSftp.connect();

channelSftp.setFilenameEncoding("gbk");

Vector vector  = channelSftp.ls("/");

try{

for(Object obj :vector){

if(obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry){

String fileName = ((com.jcraft.jsch.ChannelSftp.LsEntry)obj).getFilename();

System.out.println(fileName);

}

}

}

finally{

channelSftp.quit();

session.disconnect();

}

}

}

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文件传输的实现步骤

//1、创建JSch类,好比是FlashFXP工具

JSch jsch = new JSch();

//2、创建本次的文件传输会话对象,并连接到SFTP服务器。它好比是通过FlashFXP工具连接到SFTP服务器

session = jsch.getSession(username, host, port);

session.setPassword(passwd);

Properties config = new Properties();

config.put("StrictHostKeyChecking", "no");

session.setConfig(config);

session.connect();

try{

//3、在该session会话中开启一个SFTP通道,之后就可以在该通道中进行文件传输了

channelSftp = (ChannelSftp)session.openChannel("sftp");

channelSftp.connect();

}catch(Exception e){

e.printStackTrace();

disConnect();

throw e;

}

//4、进行文件传输操作:put()、get()....

channelSftp.put(...)

//5、操作完毕后,关闭通道并退出本次会话

if(channelSftp!=null && channelSftp.isConnected()){

channelSftp.disconnect();

}

if(session!=null && session.isConnected()){

session.disconnect();

}

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文件即可。

6、ChannelSftp类的主要API说明如下:

太多就不贴了。。。。

感谢作者分享!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值