JSch 库的使用

Posted 钟_小白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSch 库的使用相关的知识,希望对你有一定的参考价值。


*******************************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) 进入指定的目录





















































以上是关于JSch 库的使用的主要内容,如果未能解决你的问题,请参考以下文章

使用JSCH执行命令并读取终端输出的一些使用心得

无法使用 JSch 连接到服务器端口 23

关于JSCH使用自义定连接池说明

使用私钥取消 JSch Auth

使用 jsch 库在 sftp 中复制文件

使用JSch实现SFTP文件传输