首页 > 技术文章 > JSch 库的使用

super-z 2016-12-27 23:47 原文


*******************************1.建立连接的步骤

1)、JSch jsch = new JSch(); // 创建JSch对象

2)、Session session = jsch.getSession(userName, ip, port); // 根据用户名,主机ip, 端口获取一个Session对象
3)、session.setPassword(password); // 设置密码

4)、 Properties config = new Properties();

config.put("StrictHostKeyChecking", "no"); //”如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。

session.setConfig(config); // 为Session对象设置properties

5)、session.setTimeout(6000); // 设置timeout时间
session.connect(); // 通过Session建立链接

6)、Channel channel = session.openChannel("sftp"); // 打开SFTP通道

7)、channel.connect(); // 建立SFTP通道的连接
sftp = (ChannelSftp) channel;

*******************************2.断开连接的步骤

1)、ChannelSftp 断开连接 sftp.disconnect()
2)、断开session连接 sftp.getSession().disconnection()

******************************* 3.上传文件到服务器函数

1)、 public void put(String src, String dst) 将本地文件名为src的文件上传到目标服务器,目标文件名为dst,若dst为目录,则目标文件名将与src文件名相同。 采用默认的传输模式:OVERWRITE
*************注意src为windows路径 格式为"D:\\iotest\\testSFTP.txt" **************
************* dst 为服务器路径 格式为"/home/test01/zz/testSFTP.txt"**************

三种模式的区别:
OVERWRITE 0
   完全覆盖模式,即如果目标文件已经存在,传输的文件将完全覆盖目标文件,产生新的文件。
   RESUME 1
   恢复模式,如果文件已经传输一部分,这时由于网络或其他任何原因导致文件传输中断,如果下一次传输相同的文件
   则会从上一次中断的地方续传。
  APPEND 2
   追加模式,如果目标文件已存在,传输的文件将在目标文件后追加。


2)、public void put(String src, String dst, int mode)
//mode 为传输模式(mode可选值为:ChannelSftp.OVERWRITE,ChannelSftp.RESUME,ChannelSftp.APPEND)

3)、public void put(String src, String dst, SftpProgressMonitor monitor)
//类似于方法一 只是SftpProgressMonitor接口的monitor对象来监控文件传输的进度。

4)、5)、6)public void put(InputStream src, String dst)
(5)(6)类似于(2)(3)

7)、public OutputStream put(String dst) 该方法返回一个输出流,可以向该输出流中写入数据,最终将数据传 输到目标服务器,目标文件名为dst,dst不能为目录。 采用默认的传输模式:OVERWRITE

8)、9)类似 public OutputStream put(String dst, final SftpProgressMonitor monitor, final int mode)
只是参数是final

***********************************4.关于SftpProgressMonitor监控函数
接口的代码为:
public interface SftpProgressMonitor{
public static final int PUT=0;
public static final int GET=1;
void init(int op, String src, String dest, long max);
boolean count(long count);
void end();
}
我们需用自己去写实现 重写三个方法 init count end

init(): 当文件开始传输时,调用init方法。

count(): 当每次传输了一个数据块后,调用count方法,count方法的参数为这一次传输的数据块大小。

end(): 当传输结束时,调用end方法。

***********************************5.文件下载

1)、public void get(String src, String dst) 将目标服务器上文件名为src的文件下载到本地,本地文件名为dst。若dst为目录,则下载到本地的文件名将与src文件名相同

2)、public void get(String src, String dst, SftpProgressMonitor monitor)、将目标服务器上文件名为src的文件下载到本地,本地文件名为dst。若dst为目录,则下载到本地的文件名将与src文件名相同。

3)、public void get(String src, String dst,SftpProgressMonitor monitor, int mode)//同理

4)、public void get(String src, OutputStream dst)将目标服务器上文件名为src的文件下载到本地,下载的数据写入到输出流对象dst(如:文件输出流)。
5)6)同理 2)3)

7)、public InputStream get(String src) 该方法返回一个输入流,该输入流含有目标服务器上文件名为src的文件数据。可以从该输入流中读取数据,最终将数据传输到本地

8)、public InputStream get(String src, SftpProgressMonitor monitor)

9)、public InputStream get(String src, final SftpProgressMonitor monitor, finallong skip)

它所包含的监控器 progressMonitor 与上传的类似;

***********************************6.服务器的辅助方法

1)、rm(String path) 删除文件,path不能为目录,删除目录使用rmdi

2)、rmdir(String path) 删除目录,但是只能删除空目录

3)、rename(String oldpath, String newpath) 如果oldPath为目录,不要求目录必须为空
如果newpath为目录,则newpath必须不能存在,如果已经存在该目录,则会出现重名或者移动失败
1、重命名文件或者目录
2、移动文件或者目录
4)、ls(String path) 列出指定目录下的所有文件和子目录。该方法返回Vector对象,该列表具体存放的是LsEntry对象
5)、cd(String path) 进入指定的目录

推荐阅读