使用JSch实现SFTP文件传输
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说明如下:
| 方法名 | 方法说明 |
| public void put(String src, String dst) | 将本地文件名为 src 的文件上传到目标服务器,目标文件名为 dst ,若 dst 为目录,则目标文件名将与src 文件名相同。采用默认的传输模式: OVERWRITE |
| public void put(String src, String dst, int mode) | 将本地文件名为 src 的文件上传到目标服务器,目标文件名为 dst ,若 dst 为目录,则目标文件名将与src 文件名相同。指定文件传输模式为 mode ( mode 可选值为: ChannelSftp.OVERWRITE , ChannelSftp.RESUME , ChannelSftp.APPEND )。 |
| public void put(String src, String dst, SftpProgressMonitor monitor) | 将本地文件名为 src 的文件上传到目标服务器,目标文件名为 dst ,若 dst 为目录,则目标文件名将与src 文件名相同。采用默认的传输模式: OVERWRITE ,并使用实现了 SftpProgressMonitor 接口的monitor 对象来监控文件传输的进度。 |
| public void put(String src, String dst,SftpProgressMonitor monitor, int mode) | 将本地文件名为 src 的文件上传到目标服务器,目标文件名为 dst ,若 dst 为目录,则目标文件名将与src 文件名相同。指定传输模式为mode, 并使用实现了 SftpProgressMonitor 接口的 monitor 对象来监控文件传输的进度。 |
| public void put(InputStream src, String dst) | 将本地的 input stream 对象 src 上传到目标服务器,目标文件名为 dst , dst 不能为目录。采用默认的传输模式: OVERWRITE |
| public void put(InputStream src, String dst, int mode) | 将本地的 input stream 对象 src上传到目标服务器,目标文件名为 dst , dst 不能为目录。指定文件传输模式为mode |
| public void put(InputStream src, String dst, SftpProgressMonitor monitor) | 将本地的 input stream 对象 src 上传到目标服务器,目标文件名为 dst , dst 不能为目录。采用默认的传输模式: OVERWRITE 。并使用实现了 SftpProgressMonitor 接口的 monitor 对象来监控传输的进度。 |
| public void put(InputStream src, String dst,SftpProgressMonitor monitor, int mode) | 将本地的 input stream 对象 src 上传到目标服务器,目标文件名为 dst , dst 不能为目录。指定文件传输模式为 mode 。并使用实现了 SftpProgressMonitor 接口的 monitor 对象来监控传输的进度。 |
| public OutputStream put(String dst) | 该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传输到目标服务器,目标文件名为 dst , dst 不能为目录。采用默认的传输模式: OVERWRITE |
| public OutputStream put(String dst, final int mode) | 该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传输到目标服务器,目标文件名为 dst , dst不能为目录。指定文件传输模式为 mode |
| public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode) | 该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传输到目标服务器,目标文件名为 dst , dst 不能为目录。指定文件传输模式为 mode 。并使用实现了 SftpProgressMonitor 接口的 monitor 对象来监控传输的进度。 |
| public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode, long offset) | 该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传输到目标服务器,目标文件名为 dst , dst 不能为目录。指定文件传输模式为 mode 。并使用实现了 SftpProgressMonitor 接口的 monitor 对象来监控传输的进度。 offset指定了一个偏移量,从输出流偏移offset 开始写入数据。 |
| get(String src, String dst) | 下载文件到本地, src 为目标服务器上的文件,不能为目录, dst 为本地文件路径。若 dst 为目录,则本地文件名与目标服务器上的文件名一样。 |
| get(String src, String dst ,SftpProgressMonitor monitor) | 同get(String src, String dst),只是该方法允许传入传输进度的监控对象monitor。 |
| get(String src, String dst ,SftpProgressMonitor monitor ,int mode) | 同 get(String src, String dst ,SftpProgressMonitor monitor) ,同时,该方法增加了 mode 参数,允许指定文件传输模式 |
| rm(String path) | 删除文件, path 不能为目录,删除目录使用 rmdir |
| rmdir(String path) | 删除目录,但是只能删除空目录 |
| rename(String oldpath, String newpath) | 如果oldPath为目录,不要求目录必须为空 如果newpath为目录,则newpath必须不能存在,如果已经存在该目录,则会出现重名或者移动失败 1、重命名文件或者目录 2、移动文件或者目录 |
| ls(String path) | 列出指定目录下的所有文件和子目录。该方法返回 Vector 对象,该列表具体存放的是 LsEntry 对象 |
使用JSch实现SFTP文件传输的更多相关文章
- FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输
fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下. 主要是记录新接触的sftp文件上传.服务器环境下使用freesshd搭建好环境后,wi ...
- 【SFTP】使用Jsch实现Sftp文件上传-支持断点续传和进程监控
JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...
- Jsch - java SFTP 文件上传下载
使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...
- C# FTP/SFTP文件传输控件FTP for .NET/.NET CF 详细介绍
FTP for .NET将FTP客户端功能添加到您的应用程序之中..NET控件的FTP支持所有常用的FTP服务器以及代理服务器,包括可扩展的目录解析.同步以及异步操作.主动与被动模式.以VB.NET与 ...
- 为apache提供sftp文件传输服务
一.安装apache yum install httpd 二.为 /var/www/html 创建ftp账号www useradd -M -d /var/www/html www 三.更改ssh配置文 ...
- Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输
前言 搭建Hi3516的基础虚拟机,为交叉编译环境搭建前期工作.后续会编译一个基本的C语言程序Demo,在HI3516上跑. 虚拟机 开发本对虚拟机做了一些基本要求,如下图: 其实重 ...
- jsch上传文件功能
转载:http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch是Java Secure Channel的缩写.JSch是一个 ...
- SFTP文件上传与下载
SFTP是对ftp进行加密的一种文件协议. 首先是先引入:jsch-0.1.42-sources.jar与jsch-0.1.42.jar包 SFTP文件上传与下载. import java.io.Fi ...
- Linux下几种文件传输命令 sz rz sftp scp
Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...
随机推荐
- js-面向对象的程序设计,函数表达式
面向对象的程序设计: 1.属性类型:数据属性.访问器属性 数据属性:wirtable:false –只读:如果尝试为它赋值,会忽略 Configurable:false—不能从对象中删除属性 在调用O ...
- 最火的.NET开源项目
综合类 微软企业库 微软官方出品,是为了协助开发商解决企业级应用开发过程中所面临的一系列共性的问题, 如安全(Security).日志(Logging).数据访问(Data Access).配置管理( ...
- [bzoj3224]普通平衡树/3223文艺平衡树
这是一道很普通的题.. 最近花了很多时间来想要去干什么,感觉自己还是太拿衣服 做这道题是因为偶尔看到了lavender的blog和她的bzoj早期AC记录,就被题目深深地吸引到了,原因有二: 自己sp ...
- SpringMVC中向服务器传递时间参数时出现的问题
1. 问题描述: 今天在SpringMVC应用中上传参数的时候遇到如下问题: The request sent by the client was syntactically incorrect 这说 ...
- HDU5737 : Differencia
注意到$b$不变,考虑用归并树来维护这个$b$序列,对于每个节点有序地维护$b$,同时在归并的时候预处理出每个元素在左右儿子里的排名. 在归并树上额外维护区间内$a\geq b$的个数以及赋值标记. ...
- Monkeyrunner脚本中component快速定位方法
在编写MonkeyRunner脚本过程中,会出现component这一项内容,很多人可能不知道怎么确认,其实这个主要是为了指定要测试的程序包名和主Activity名,我们可以用以下方法去进行确认: 1 ...
- html表单元素的colspan和rowspan
colspan和rowspan这两个属性用于创建特殊的表格. colspan用来指定单元格横向跨越的列数:colspan就是合并列的,colspan=2的话就是合并两列. rowspan用来指定单元格 ...
- ACM: Happy 2004-数论专题-因子求和-快速幂
Happy 2004 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descript ...
- 20161005 NOIP 模拟赛 T3 解题报告
subset 3.1 题目描述 一开始你有一个空集,集合可以出现重复元素,然后有 Q 个操作 1. add s 在集合中加入数字 s. 2. del s 在集合中删除数字 s.保证 s 存在 3. c ...
- LINQ to Entities 事务简单例子
默认LINQ to Entities会使用隐式事务,即:对于每一个savechanges都分开在单独的事务之中. 也可以显式地指定事务: using (var db = new TestEntitie ...