使用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安全协议的文件传输管理工具 ...
随机推荐
- 开发Portlet第一步:如何基于Crystal开发静态Portlet?
当团队需要基于Crystal开发Porltet时,分为以下三部: 基于Crystal开发静态Portlet 基于将静态Portlet修改为基于测试数据的动态Portlet 将动态Portlet与动态数 ...
- Liferay 6.2 改造系列之二十四:修改liferay密码的加密方式
为了便于后期与Cas集成过程中使用数据库用户的方便,将liferay密码的加密方式改为SHA. 在/portal-master/portal-impl/src/portal.properties配置文 ...
- Linux将文件拷到u盘
1:终端中获取root后,使用fdisk -l来查看位置 2:挂载u盘:mount /路径 /mnt cd /mnt可进入u盘,ls可查看文件 3:复制:cp /(文件路径) /mnt 4:退出u盘: ...
- zoj 3795 Grouping tarjan缩点 + DGA上的最长路
Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Submit Status Practic ...
- pycharm设置主题/默认格式/字体
1.步骤为:File-->Settings-->Appearance & Behavior-->Appearance-->Theme中就可以选择喜欢的主题 2.一般将文 ...
- header元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- section和article元素
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Mvc网站发布到IIS
网站发布步骤: 这部分是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因. 如有冒犯请联系本人,或删除,或标明出处. 因为好的文章,以前只想收藏,但连接 ...
- WPF [调用线程无法访问此对象,因为另一个线程拥有该对象。] 解决方案以及如何实现字体颜色的渐变
本文说明WPF [调用线程无法访问此对象,因为另一个线程拥有该对象.] 解决方案以及如何实现字体颜色的渐变 先来看看C#中Timer的简单说明,你想必猜到实现需要用到Timer的相关知识了吧. C# ...
- Problem to create "New Database Diagram" in Microsoft SQL Server Management Studio for SQL Server 2012
Error: when click "New Database Diagram", a error popped up and said "Attempted to re ...