ChannelSftp 并不直接支持远程下载目录,

直接下载, 出现 : not supported to get directory ...

需要自己实现, 我的实现如下:

/**
* @param ftp_dir
* @param local_dir
* @param sftp
* @return
*/
public int downloadDir(String ftp_dir, String local_dir, ChannelSftp sftp) {
int sum = 0;
try {
File dir = new File(local_dir);
if (dir.isFile()) {
System.err.println(" is a file already " + dir);
return -1;
}
// if (!dir.exists()) {
// dir.mkdirs();
// }
// sftp.get(ftp_dir, new FileOutputStream(dir)); try {
Vector files = sftp.ls(ftp_dir);
if (files == null) {
return 0;
}
for (Iterator<ChannelSftp.LsEntry> iterator = files.iterator(); iterator.hasNext();) {
ChannelSftp.LsEntry str = iterator.next();
String filename = str.getFilename();
if (filename.equals(".") || filename.equals("..")) {
continue;
}

// System.out.println(filename + " --- " + str.getLongname());

SftpATTRS attrs = str.getAttrs();

boolean isdir = attrs.isDir();

boolean fifo = attrs.isFifo();

				String local_file_path = local_dir + "/" + filename;
String ftp_file_path = ftp_dir + "/" + filename;
if (isdir) {
File dir2 = new File(local_file_path);
if (!dir2.exists()) {
System.out.println(" dir2.mkdir " + local_file_path);
dir2.mkdir();
} else {
boolean b = dir2.isDirectory();
if (!b) { }
}
sum += downloadDir(ftp_file_path, local_file_path, sftp);
} else {
/**
* 判断本地文件是否存在, 如何存在, 而且 大小/ 最后修改时间相同, 则不进行下载。 TODO
*/
long size = attrs.getSize();
int aTime = attrs.getATime();
int mTime = attrs.getMTime();
downloadFile(ftp_file_path, local_file_path, sftp);
sum++;
}
}
} catch (SftpException e) {
e.printStackTrace();
}
return sum;
} catch (Exception e) {
e.printStackTrace();
return -1;
} finally {
}
}

ChannelSftp 远程下载目录的更多相关文章

  1. Linux scp 远程文件/目录传输

    Linux scp远程文件/目录传输 1.获取远程服务器上的文件 scp -P 22 root@www.test.com:/root/test.tar.gz /home/test.tar.gz 上端口 ...

  2. LINUX安装SVN+添加自动同步+远程下载最新代码

    LINUX安装SVN+添加自动同步+远程下载最新代码---------------------1. 新建一个用户:svnroot ,以下操作非特别说明皆为root用户操作--------------- ...

  3. Python 模块功能paramiko SSH 远程执行及远程下载

    模块 paramiko paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现 ...

  4. 基于Python——实现远程下载sftp文件(只下载.zip文件)

    [背景]远程下载发布包等文件时,总是要使用WinSCP等工具登陆拖动.今天就介绍一种使用python下载文件到本地的方法. [代码实现] import paramiko # paramiko模块,基于 ...

  5. java操作远程共享目录

    一.前言 根据客户反馈,在进行文件下载的时候,新增远程共享目录,下载对应的文件到远程共享目录,采用常用的IO操作模式,提示下载成功,但是客户去远程共享目录查看对应的下载文件,反馈说没有找到对应的文件. ...

  6. 树莓派2B安装Xware迅雷远程下载

    转自:http://www.cnblogs.com/liangjh/articles/5347811.html 一.安装使用迅雷Xware (1)下载Xware1.0.31_armel_v5te_gl ...

  7. php远程下载文件

    <?php /* 本源码来源于网络 http://user.qzone.qq.com/292672703 */ header("content-Type: text/html; cha ...

  8. 树莓派2安装Xware实现迅雷远程下载

    首先,远程功能很实用,尤其是基于迅雷的,现在国内的下载基本上迅雷只手遮天,别的工具友好程度不理想,这是对于我这种小白来说. 首先,我的树莓派系统不是原生的,我烧写的是ubuntu16,没有桌面,没有多 ...

  9. Java远程下载文件到本地(http协议和ssh2协议)

    Java中java.io包为我们提供了输入流和输出流,对文件的读写基本上都依赖于这些封装好的关于流的类中来实现.前段时间遇到了以下两种需求: 1.与某系统对接,每天获取最新的图片并显示在前端页面.该系 ...

随机推荐

  1. mirror op 如果在windows receiver上是黑屏

    mirror op 如果在windows receiver上是黑屏,手机上要重启下再打开mirror op.(手机是一加3 安卓7.0)

  2. azure 1元试用,如何创建虚拟机等

    付了1元后,直接进 https://manage.windowsazure.cn 创建虚拟机即可.

  3. wxPython 入门开发示例

    1.背景资料 wxPython API:https://www.wxpython.org/Phoenix/docs/html/ 2.入门示例 wxPython最重要的两个概念:App与Frame,其中 ...

  4. 黄聪:HBuilder左侧项目管理器如何不与标签页一起自动切换

    把这个按钮取消就好了

  5. Solr 自定义排序[1]

    需求:商品排序,无库存的商品排在后面(排序). 搜索:  默认搜索:                                            df:        可以看出左图第1个.第 ...

  6. 《Java并发编程实战》笔记-锁与原子变量性能比较

    如果线程本地的计算量较少,那么在锁和原子变量上的竞争将非常激烈.如果线程本地的计算量较多,那么在锁和原子变量上的竞争会降低,因为在线程中访问锁和原子变量的频率将降低. 在高度竞争的情况下,锁的性能将超 ...

  7. 搞懂webdriver的底层原理,才敢说自己懂自动化!

    Selenium的历史1 selenium1.x:这个时候的selenium,使用的是JavaScript注入技术与浏览器打交道. 需要Selenium RC启动一个Server,将操作Web元素的A ...

  8. 计时器setInterval()

    在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互时间:周期性执行或调用表达式之间的 ...

  9. jquery中each()的三种遍历用法

    1.选择器+遍历 $('div').each(function (i){ i就是索引值 this 表示获取遍历每一个dom对象 }); 2.选择器+遍历 $('div').each(function  ...

  10. [UE4]创建属性绑定