上一篇讲述了使用JSch实现文件上传的功能,这一篇主要讲述一下JSch实现文件下载的功能。并介绍一些SFTP的辅助方法,如cd,ls等。
同样,JSch的文件下载也支持三种传输模式:OVERWRITE, RESUME和APPEND,请参考上篇随笔:JSch - Java实现的SFTP(文件上传详解篇)
JSch文件下载是通过调用ChannelSftp对象的get方法来实现的。ChannelSftp中有9个get方法的重载方法:
publicvoid get(String src, String dst)
|
将目标服务器上文件名为src的文件下载到本地,本地文件名为dst。若dst为目录,则下载到本地的文件名将与src文件名相同。(注:src必须是文件,不能为目录)
采用默认的传输模式:OVERWRITE
|
publicvoid get(String src, String dst, SftpProgressMonitor monitor)
|
将目标服务器上文件名为src的文件下载到本地,本地文件名为dst。若dst为目录,则下载到本地的文件名将与src文件名相同。(注:src必须是文件,不能为目录)
采用默认的传输模式:OVERWRITE
并使用实现了SftpProgressMonitor接口的monitor对象来监控文件的传输进度。
|
publicvoid get(String src, String dst,SftpProgressMonitor monitor, int mode)
|
将目标服务器上文件名为src的文件下载到本地,本地文件名为dst。若dst为目录,则下载到本地的文件名将与src文件名相同。(注:src必须是文件,不能为目录)
指定文件传输模式为mode(mode可选值为:ChannelSftp.OVERWRITE,ChannelSftp.RESUME,ChannelSftp.APPEND)
并使用实现了SftpProgressMonitor接口的monitor对象来监控文件的传输进度。
|
publicvoid get(String src, OutputStream dst)
|
将目标服务器上文件名为src的文件下载到本地,下载的数据写入到输出流对象dst(如:文件输出流)。
采用默认的传输模式:OVERWRITE
|
publicvoid get(String src, OutputStream dst, SftpProgressMonitor monitor)
|
将目标服务器上文件名为src的文件下载到本地,下载的数据写入到输出流对象dst(如:文件输出流)。
采用默认的传输模式:OVERWRITE
并使用实现了SftpProgressMonitor接口的monitor对象来监控文件的传输进度。
|
publicvoid get(String src, OutputStream dst, SftpProgressMonitor monitor, int mode, long skip)
|
将目标服务器上文件名为src的文件下载到本地,下载的数据写入到输出流对象dst(如:文件输出流)。
指定文件传输模式为mode
并使用实现了SftpProgressMonitor接口的monitor对象来监控文件的传输进度。
skip指定了一个跳读量,即下载时从src文件跳过skip字节的数据。(一般不推荐使用该参数,默认设为0)
|
public InputStream get(String src)
|
该方法返回一个输入流,该输入流含有目标服务器上文件名为src的文件数据。可以从该输入流中读取数据,最终将数据传输到本地(如:读取数据后将数据写入到本地的文件中)
(注:该方法不支持多种文件传输模式,如何读取与保存数据由应用程序自己确定)
|
public InputStream get(String src, SftpProgressMonitor monitor)
|
该方法返回一个输入流,该输入流含有目标服务器上文件名为src的文件数据。可以从该输入流中读取数据,最终将数据传输到本地(如:读取数据后将数据写入到本地的文件中)
并使用实现了SftpProgressMonitor接口的monitor对象来监控文件的传输进度。
(注:该方法不支持多种文件传输模式,如何读取与保存数据由应用程序自己确定)
|
public InputStream get(String src, final SftpProgressMonitor monitor, finallong skip)
|
该方法返回一个输入流,该输入流含有目标服务器上文件名为src的文件数据。可以从该输入流中读取数据,最终将数据传输到本地(如:读取数据后将数据写入到本地的文件中)
并使用实现了SftpProgressMonitor接口的monitor对象来监控文件的传输进度。
(注:该方法不支持多种文件传输模式,如何读取与保存数据由应用程序自己确定)
skip指定了一个跳读量,即下载时从src文件跳过skip字节的数据。(一般不推荐使用该参数,默认设为0)
|
应用实例:
- SFTPGetTest.java
- package com.longyg.sftp;
- import java.io.FileOutputStream;
- import java.io.OutputStream;
- import java.util.HashMap;
- import java.util.Map;
- import com.jcraft.jsch.ChannelSftp;
- import com.jcraft.jsch.SftpATTRS;
- public class SFTPGetTest {
- public SFTPChannel getSFTPChannel() {
- return new SFTPChannel();
- }
- public static void main(String[] args) throws Exception {
- SFTPGetTest test = new SFTPGetTest();
- Map<String, String> sftpDetails = new HashMap<String, String>();
- // 设置主机ip,端口,用户名,密码
- sftpDetails.put(SFTPConstants.SFTP_REQ_HOST, "10.9.167.55");
- sftpDetails.put(SFTPConstants.SFTP_REQ_USERNAME, "root");
- sftpDetails.put(SFTPConstants.SFTP_REQ_PASSWORD, "arthur");
- sftpDetails.put(SFTPConstants.SFTP_REQ_PORT, "22");
- SFTPChannel channel = test.getSFTPChannel();
- ChannelSftp chSftp = channel.getChannel(sftpDetails, 60000);
- String filename = "/home/omc/ylong/sftp/INTPahcfg.tar.gz";
- SftpATTRS attr = chSftp.stat(filename);
- long fileSize = attr.getSize();
- String dst = "D:\\INTPahcfg.tar.gz";
- OutputStream out = new FileOutputStream(dst);
- try {
- chSftp.get(filename, dst, new FileProgressMonitor(fileSize)); // 代码段1
- // chSftp.get(filename, out, new FileProgressMonitor(fileSize)); // 代码段2
- /**
- * 代码段3
- *
- InputStream is = chSftp.get(filename, new MyProgressMonitor());
- byte[] buff = new byte[1024 * 2];
- int read;
- if (is != null) {
- System.out.println("Start to read input stream");
- do {
- read = is.read(buff, 0, buff.length);
- if (read > 0) {
- out.write(buff, 0, read);
- }
- out.flush();
- } while (read >= 0);
- System.out.println("input stream read done.");
- }
- */
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- chSftp.quit();
- channel.closeChannel();
- }
- }
- }
注:请分别将main方法中的代码段1,代码段2,代码段3取消注释,运行程序来进行测试。这三段代码分别演示了如何使用JSch的各种put方法来进行文件下载。
程序段:
SFTPChannel channel = test.getSFTPChannel();
ChannelSftp chSftp = channel.getChannel(sftpDetails, 60000);
这两行语句得到一个ChannelSftp对象,具体实现见上篇随笔:JSch - Java实现的SFTP(文件上传详解篇)
注意:每个get方法中都使用了一个SftpProgressMonitor接口的实现对象(FileProgressMonitor和MyProgressMonitor)来监控传输进度,具体实现见上篇随笔:JSch - Java实现的SFTP(文件上传详解篇)
代码段1:直接将目标服务器上文件名为src的文件下载到本地,本地文件名为dst。(注:使用这个方法时,dst可以是目录,若dst为目录,则下载到本地的文件名将与src文件名相同)
代码段2:将目标服务器上文件名为src的文件下载到本地的一个输出流对象,该输出流为一个文件输出流
代码段3:采用读取get方法返回的输入流数据的方式来下载文件。这个示例中,将读取的数据写入到了本地的一个文件中。采用这种方式,可以由应用程序设定每次读取输入流的数据块大小,也就是每次传输的数据块大小。比如这个示例中:
byte[] buff = new byte[1024 * 2];
这条语句指定了每次传输的数据块大小为2KB,可以从测试代码段3的输出中看出确实每次只传输了2KB,即2048字节:
- logs
- Transferring begin.
- Start to read input stream
- Currently transferred total size: 2048 bytes
- Currently transferred total size: 4096 bytes
- Currently transferred total size: 6144 bytes
- Currently transferred total size: 8192 bytes
- Currently transferred total size: 10240 bytes
- Currently transferred total size: 12288 bytes
- Currently transferred total size: 14336 bytes
- ...
JSch文件下载与文件上传的传输进度,都是通过实现SftpProgressMonitor接口来实现的。所以这里不在详述,请直接参见上篇随笔:JSch - Java实现的SFTP(文件上传详解篇)
相关推荐
JSCH(Java Secure Channel)是一个用Java实现的SSH2库,能够支持SFTP功能,包括文件的上传和下载。本篇文章将详细讲解如何利用JSCH库实现在Java程序中进行SFTP文件的上传与下载。 首先,我们需要在项目中引入JSCH...
JSCH库为Java开发者提供了便捷的SSH2协议实现,尤其是对于SFTP文件传输的需求。通过简单的API,开发者可以轻松地在Java应用中集成安全的远程文件操作和命令执行功能。了解并熟练掌握JSCH库的使用,对于开发涉及SSH...
在"利用JSCH实现文件传输"这一部分,你需要理解SSH协议的基础知识,包括身份验证、加密和会话管理。JSCH提供了API来创建连接、打开通道、执行SFTP操作等。例如,你可以创建一个`JSch`实例,设置用户信息,然后建立到...
在本文中,我们将深入探讨JSch库的工作原理、如何配置以及如何使用JSch实现SFTP(Secure File Transfer Protocol)文件传输。 ### JSch库介绍 JSch库提供了全面的SSH2功能,包括公钥认证、密码认证、键盘交互式...
**JSch API文档详解** JSch(Java Secure Channel)是一个用Java实现的SSH2库,它允许Java应用程序连接到支持SSH协议的服务器,进行安全的数据传输。JSch库提供了广泛的API,涵盖了SSH协议的主要功能,包括连接建立...
本篇文章通过具体的代码示例详细介绍了如何使用JSch实现SFTP文件下载功能,并简要介绍了部分辅助方法。这些内容为Java开发者提供了实践指导,有助于他们更高效地完成文件传输任务。需要注意的是,在实际部署时还需...
JSch - Java实现的SFTP(文件上传详解篇)
要使用这个库,开发者需要将"jsch.jar"添加到项目的类路径中,并按照JSCH的API文档编写相应的代码来实现SFTP操作。 总结来说,JSCH是Java平台上的一个强大工具,它使开发人员能够方便地集成SSH2协议,尤其是实现...
JSch(Java Secure Channel)是一个开源的Java库,它实现了SSH2协议,用于在不同系统之间安全地传输文件。版本号0.1.55表明这是该库的一个稳定版本,适用于Java开发者在Linux系统上进行文件的安全传输。"亲测可用,...
4. **执行操作**:通过已创建的通道,可以执行远程命令、上传/下载文件,或者实现本地到远程、远程到本地、本地到本地的端口转发。 在实际应用中,使用jsch库进行SSH连接的一般步骤如下: 1. 加载jsch库,并实例化...
在Java编程环境中,有时...总的来说,`jsch.jar`和`SftpUtil.java`为Java开发者提供了一种简洁而强大的方式来实现SFTP文件传输。通过理解和使用这两个组件,你可以轻松地在Java应用程序中集成安全的远程文件操作功能。
ChannelSftp类是JSch实现SFTP的核心类,它封装了SFTP协议的所有操作方法。例如,put()用于文件上传,get()用于文件下载,cd()用于进入指定目录,ls()用于获取指定目录下的文件列表,rename()用于重命名文件等。利用...
要使用JSch实现SFTP,你需要遵循以下步骤: 1. **导入JSch库**:在项目中添加jsch-0.1.42.jar依赖。 2. **创建Session**:使用`JSch`类的`getSession()`方法,传入用户名、主机名、端口号和密码(或私钥)。 3. *...
1. **远程文件传输**:通过SFTP(SSH File Transfer Protocol)协议,JSCH允许用户在本地和远程主机之间安全地上传和下载文件。 2. **远程命令执行**:使用JSCH,开发者可以执行远程服务器上的命令,获取命令的输出...
感谢你的下载,文件说明如下: *jsch的源文件 *jsch的依赖包 *用jsch源文件及依赖包构建的项目,便于修改其源码* 修改源码后重新导出的jar包 *我写的一段小程序,实现的主要功能是同步sftp上的文件夹(sftp->本地) ...
3. **文件传输**:JSch支持SFTP(SSH File Transfer Protocol),允许用户在本地和远程系统之间安全地传输文件,这对于自动化部署或者备份场景非常关键。 4. **端口转发**:JSch还实现了SSH的端口转发功能,可以将...
在这个主题中,我们将深入探讨如何使用JSCH库来实现FTP的文件上传、下载和删除功能。 JSCH是一个纯Java实现的SSH2库,它允许Java程序执行SCP(Secure Copy)、SFTP(Secure File Transfer Protocol)和FTP通过SSH...
在"压缩包子文件的文件名称列表"中,只有一个文件名"jsch-0.1.53-55",这可能是一个包含两个版本库的合并文件,或者是一个指导文档,详细解释如何在不同版本之间进行选择和升级。用户在使用时,需要根据自己的需求和...
Java使用JSCH库实现SFTP文件管理是一种常见的远程文件传输方式,特别适用于需要与服务器进行交互,例如上传、下载文件的场景。JSCH(Java Secure Channel)是一个纯Java实现的SSH2库,允许用户通过SSH协议连接到远程...