1、JSch开发包下载
http://www.jcraft.com/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说明如下:
太多就不贴了。。。。
本文转自:http://www.cnblogs.com/itmanxgl/p/fe5d33512609fe540eb08a76e3c4db3a.html?utm_source=tuicool&utm_medium=referral
感谢作者分享!