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说明如下:

方法名 方法说明
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文件传输的更多相关文章

  1. FileUpload 上传文件,并实现c#使用Renci.SshNet.dll实现SFTP文件传输

    fileupload上传文件和jquery的uplodify控件使用方法类似,对服务器控件不是很熟悉,记录一下. 主要是记录新接触的sftp文件上传.服务器环境下使用freesshd搭建好环境后,wi ...

  2. 【SFTP】使用Jsch实现Sftp文件上传-支持断点续传和进程监控

    JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到 ...

  3. Jsch - java SFTP 文件上传下载

    使用Jsch上传.下载文件,核心步骤是:获取channel,然后使用get/put方法下载.上传文件 核心代码句: session = jSch.getSession(ftpUserName, ftp ...

  4. C# FTP/SFTP文件传输控件FTP for .NET/.NET CF 详细介绍

    FTP for .NET将FTP客户端功能添加到您的应用程序之中..NET控件的FTP支持所有常用的FTP服务器以及代理服务器,包括可扩展的目录解析.同步以及异步操作.主动与被动模式.以VB.NET与 ...

  5. 为apache提供sftp文件传输服务

    一.安装apache yum install httpd 二.为 /var/www/html 创建ftp账号www useradd -M -d /var/www/html www 三.更改ssh配置文 ...

  6. Hi3516开发笔记(二):Hi3516虚拟机基础环境搭建之串口调试、网络连接以及sftp文件传输

    前言   搭建Hi3516的基础虚拟机,为交叉编译环境搭建前期工作.后续会编译一个基本的C语言程序Demo,在HI3516上跑.   虚拟机   开发本对虚拟机做了一些基本要求,如下图:    其实重 ...

  7. jsch上传文件功能

    转载:http://www.cnblogs.com/longyg/archive/2012/06/25/2556576.html JSch是Java Secure Channel的缩写.JSch是一个 ...

  8. SFTP文件上传与下载

    SFTP是对ftp进行加密的一种文件协议. 首先是先引入:jsch-0.1.42-sources.jar与jsch-0.1.42.jar包 SFTP文件上传与下载. import java.io.Fi ...

  9. Linux下几种文件传输命令 sz rz sftp scp

    Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...

随机推荐

  1. css整理-03 文本

    缩进和水平对齐 缩进文本:text-indent 可以设置为负值 可以为所有块级元素应用,但无法应用到行内元素,图像之类的替换元素: 水平对齐: text-align left,center,righ ...

  2. no-jquery 05 Utilities

    Utilities type // is this a function? typeof someValue === 'function'; // is this an object? someVal ...

  3. js html 一些技巧

    0.同步或异步ajax进行提交add update delete等. 在ajax中传参数可以和web端bean对应 1.ajax完成后跳转可以在js中使用 window.location.href=u ...

  4. 最近点对问题 POJ 3714 Raid && HDOJ 1007 Quoit Design

    题意:有n个点,问其中某一对点的距离最小是多少 分析:分治法解决问题:先按照x坐标排序,求解(left, mid)和(mid+1, right)范围的最小值,然后类似区间合并,分离mid左右的点也求最 ...

  5. android6.0 适配的问题——activity销毁的问题

    1.最近我去运行我们公司所开发的APP,发现出现很多问题,就是从前一个页面跳到另外一个页面后,前一个页面会被销毁. 正常来说,activity跳转过程是这样: A: 存在intent +setActi ...

  6. BZOJ4171 : Rhl的游戏

    把第一行每个位置设成未知量,对于之后每一行,都可以用第一行的未知量线性表示. 那么只需要加上最后一行的$m$个方程,对于不能按的那$k$个位置也列出对应的方程. 用高斯消元判断是否有解即可,时间复杂度 ...

  7. hive Java API

    Java连接hive进行操作的方式有多种,接触到了两种: 首先,hive要起动远程服务接口,命令: hive --service hiveserver -p 50000 & 1. 通过jdbc ...

  8. ACM: Find MaxXorSum 解题报告-字典树

    Find MaxXorSum Time Limit:2000MS Memory Limit:65535KB 64bit IO Format: Description Given n non-negat ...

  9. 【BZOJ】1406: [AHOI2007]密码箱

    http://www.lydsy.com/JudgeOnline/problem.php?id=1406 题意:求$0<=x<n, 1<=n<=2,000,000,000, 且 ...

  10. BestCoder Round #77

    T1 xiaoxin juju needs help 计算组合数然后多重集排列乱搞,注意判无解情况(TM我就判错然后FST了). #include<cstdio> #include< ...