JSch - Java实现的SFTP(文件下载详解篇)(转)
| 文件下载 |
| 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();
}
}
}
SFTPChannel channel = test.getSFTPChannel();
ChannelSftp chSftp = channel.getChannel(sftpDetails, 60000);
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
...

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(文件上传详解篇)
声明:本文为个人原创文章,如转载请注明文章出处:http://www.cnblogs.com/longyg/archive/2012/06/25/2561332.html
JSch - Java实现的SFTP(文件下载详解篇)(转)的更多相关文章
- 【转】JSch - Java实现的SFTP(文件下载详解篇)
上一篇讲述了使用JSch实现文件上传的功能,这一篇主要讲述一下JSch实现文件下载的功能.并介绍一些SFTP的辅助方法,如cd,ls等. 同样,JSch的文件下载也支持三种传输模式:OVERWRI ...
- JSch - Java实现的SFTP(文件下载详解篇)
上一篇讲述了使用JSch实现文件上传的功能,这一篇主要讲述一下JSch实现文件下载的功能.并介绍一些SFTP的辅助方法,如cd,ls等. 同样,JSch的文件下载也支持三种传输模式:OVERWRITE ...
- JSch - Java实现的SFTP
JSch - Java实现的SFTP(文件上传详解篇) JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以 ...
- java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了! 社区福利快来领取免费参加MDCC大会机会哦 Tag功能介绍—我们 ...
- Java开发利器Myeclipse全面详解
Java开发利器Myeclipse全面详解: Ctrl+1:修改代码错误 Alt+Shift+S:Source命令 Ctrl+7:单行注释 Ctrl+Shift+/ :多行注释 Ctrl+I :缩进( ...
- Java中的main()方法详解
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...
- [译]Java Thread join示例与详解
Java Thread join示例与详解 Java Thread join方法用来暂停当前线程直到join操作上的线程结束.java中有三个重载的join方法: public final void ...
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
- 使用Java操作文本文件的方法详解
使用Java操作文本文件的方法详解 摘要: 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而引入了Reader和Writer两个类 最初java是不支持对文本文件的处理的,为了弥补这个缺憾而 ...
随机推荐
- 输入一个字符串,去掉重复的字符,并按ASCII值排序-华为机试
import java.util.Scanner; //输入字符串,去掉重复的字符,并按ASSIC码值排序 public class quChong { public static void main ...
- HDFS的Java客户端操作代码(HDFS删除文件或目录)
1.HDFS删除文件或目录 package Hdfs; import java.io.IOException; import java.net.URI; import org.apache.hadoo ...
- mysql锁表和解锁语句分享
对于MySQL来说,有三种锁的级别:页级.表级.行级 页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY以及很久以前的ISAM. 行级的典型代表引擎为INNODB. ...
- Java 之文件IO编程 之读取
package com.sun; /* * 这里是对文件IO流读取的操作 * 2014-08-10 */ import java.io.*; public class File_test { publ ...
- Java SE (5)之 线程使用
JAVA有两种线程的方法Thread 和Runnable 能够使用,这是为了弥补不能多继承的缺陷 首先是 Thread package com.sunzhiyan03; /* * 演示线程 * */ ...
- H TML5 之 (1) 初识HTML5
新特性 HTML5 中的一些有趣的新特性: 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持 新的特殊内容元素,比如 article.foo ...
- 使用oracle的SQL Developer创建用户的方法
这里针对的是Oracle11g,其它版本的没测试过不知道. 首先,使用system建立连接,密码是你安装时指定的那个密码,然后在最下面的“其它用户”中创建一个新用户. 注意1:创建完毕后一定要注意要在 ...
- while loading persisted sessions 异常解决方法
一直用tomcat一段时间都正常无事,最近一次启动tomcat就发生以下异常: 严重: IOException while loading persisted sessions: java.io.EO ...
- Linq 构造复杂Json 多表group by
一个主表A(a1,a2),子表B(a1,b1,b2) ,想得到的结果是 [{a1,a2,Info [{b1,b2},{b1,b2},...}]] var list= from a in A join ...
- Fedora 21 安装桌面环境
Mate桌面环境:$ sudo yum install @mate-desktop KDE桌面环境:$ sudo yum install @kde-desktop XFCE桌面环境:$ sudo yu ...