ChannelSftp 远程下载目录

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 {
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值