使用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安全协议的文件传输管理工具 ...
随机推荐
- 那些Android中的性能优化
性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起. 首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应 ...
- shell-bash学习03 别名、日期、函数
别名 使用alias 创建 alias new_command='command sequence' 保存 echo 'alias cmd="command seq"' >& ...
- PHP 自带查询运行内存的函数
memory_get_usage - 返回分配给 PHP 的内存量 int memory_get_usage ([ bool $real_usage = false ] ) 返回当前分配给你的 PHP ...
- Docker中搭建Hadoop-2.6单机伪分布式集群
1 获取一个简单的Docker系统镜像,并建立一个容器. 1.1 这里我选择下载CentOS镜像 docker pull centos 1.2 通过docker tag命令将下载的CentOS镜像名称 ...
- BestCoder Round #74 (div.2)
组合 1001 LCP Array 第一题就小难,出题的好像是浙大的大牛? 找到一个规律:a[i] = x, s[i..i+x]都想同.a[i] = a[i+1] + 1 (a[i] > 0), ...
- OpenCV(5) 对比度和亮度
公式: 两个参数 \alpha > 0 和 \beta 一般称作 增益 和 偏置 参数.我们往往用这两个参数来分别控制 对比度 和 亮度 . #include "stdafx. ...
- Bridge模式——对象结构型模式
今天看了Bridge模式,对其进行简单的总结,并给出几篇通俗易懂的文章链接. (一)意图--将抽象部分和它的实现部分分离,使它们都可以独立地变化. 适用于从多维度描述的类型,拆解开来,使其能沿着各维度 ...
- C#生成PDF文档,读取TXT文件内容
using System.IO;using iTextSharp.text;using iTextSharp.text.pdf; //需要在项目里引用ICSharpCode.SharpZipLib.d ...
- ural 1255. Graveyard of the Cosa Nostra
1255. Graveyard of the Cosa Nostra Time limit: 1.0 secondMemory limit: 64 MB There is a custom among ...
- BZOJ3615 : MSS
将所有点按横坐标排序,那么最长上升子序列和最长下降子序列里必有一个长度不小于$\sqrt{n}$. 因为如果最长上升子序列很短,那么根据Dilworth定理,它的反链长度与它成反比. 因此可以将$n$ ...