C#实现SFTP文件传输
来源:互联网 发布:淘宝上宝贝排名靠前 编辑:程序博客网 时间:2024/05/21 09:00
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()文件下载注:以上这些方法都有很多重载方法
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说明如下:
如果newpath为目录,则newpath必须不能存在,如果已经存在该目录,则会出现重名或者移动失败
1、重命名文件或者目录
2、移动文件或者目录ls(String path)列出指定目录下的所有文件和子目录。该方法返回 Vector 对象,该列表具体存放的是 LsEntry 对象
- C#实现SFTP文件传输
- 使用JSch实现SFTP文件传输
- 使用JSch实现SFTP文件传输
- sftp文件传输
- C#下实现文件传输
- linux之间文件传输(sftp)
- FTP/SFTP 文件传输协议
- Linux sftp的文件传输
- sftp 安全文件传输
- hp_unix sftp文件传输(采用expect实现sftp自动传输文件)
- sftp 在文件传输中的作用
- linux sftp 安全文件传输命令
- C#中应用PSFTP实现SFTP上传
- C# 通过 Renci.SshNet 实现SFTP数据传输
- C# 通过 Renci.SshNet 实现SFTP数据传输
- C# FTP/SFTP文件传输控件包File Transfer Pack详细介绍
- C# SFTP
- 通过CuteFTP用VBScript使用SFTP,实现Win与Linux的文件传输
- VC Web打印解决方案概述
- Windows 7中的“帮助和支持”无法打开怎么办?
- Debug your Java code with ease using JPDA
- Android_编程开发规范
- 20160108HTML学习笔记html的四大基本结构
- C#实现SFTP文件传输
- 使用std::string 通过dll接口传递时,应该注意的问题
- 华为机试——删除一个字符串中出现次数最少的字符
- DML、DDL、DCL区别 .
- oracle impdp/expdp 的权限问题
- java字符分割
- 安卓弹出提示显示框
- java MVC
- 外牌年检车辆在上海办理年检