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. java实现PC之间的udp数据单向传输

    本示例包括两个客户端UDPClient和MyServer.UDPClient发送数据到MyServer,MyServer负责接收数据.可传输文本.视频.音频.图片等. 最近我在学习这一块,写个例子. ...

  2. 黄聪:安装cnpm替代默认的npm

    使用cnpm替代默认的npm: npm install -g cnpm --registry=https://registry.npm.taobao.org

  3. Device Tree碎碎念

    首先推荐elinux.org上一篇关于Device Tree的文章: http://elinux.org/Device_Tree_Usage 这是一篇关于Device Tree的入门文章.对英文犯怵的 ...

  4. spring AOP的学习

    1.Spring常用的概念 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. Pointcut(切入点): ...

  5. solr Query[转]

    一. Query参数 1. CoreQueryParam查询的参数 1) q: 查询字符串,必须的. 2) q.op: 覆盖schema.xml的defaultOperator(有空格时用" ...

  6. bzoj3491: PA2007 Subsets

    Description 有一个集合U={1,2,…,n),要从中选择k个元素作为一个子集A.若a∈A,则要有a*X不属于A,x是一个给定的数.求可选方案对M取模后的值. 1< = N< = ...

  7. Sqoop-1.4.6安装部署及详细使用介绍

    之所以选择Sqoop1是因为Sqoop2目前问题太多.无法正常使用,综合比较后选择Sqoop1. Sqoop1安装配置比较简单 一.安装部署 (1).下载安装包 下载地址:http://archive ...

  8. java为什么匿名内部类的参数引用时final(转)

    https://blog.csdn.net/z69183787/article/details/68490440 https://www.zhihu.com/question/21395848 htt ...

  9. Error detected while processing function pythoncomplete#Complete: 错误解决

    python vim 环境配置好后,莫名奇妙总是出现:Error detected while processing function pythoncomplete#Complete: 恼人的错误,多 ...

  10. [UE4]使用C++重写蓝图,SpawnObject根据类型动态创建UObject

    先大量使用蓝图制作项目,后续再用C++把复杂的蓝图重写一遍,用C++代码按照蓝图依葫芦画瓢就可以了,很简单,但需要遵守一些原则: 第一种方法:使用继承 一.创建一个C++类作为蓝图的父类(C++类继承 ...