• 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 {
    	}
    }
  • 相关阅读:
    jQuery 之 serialize() serializeArray()
    浅析JavaScript中Function对象(二) 之 详解call&apply
    详解JavaScript作用域及作用域链
    浅析JavaScript中Function对象(一)之 arguments对象
    浅析jQuery基本结构($实现原理)
    浅析伪数组
    jQuery版本差异简要分析
    白话解释:控制反转与依赖注入
    为什么开发移动端web不使用jQuery
    浅析meta标签用处
  • 原文地址:https://www.cnblogs.com/FlyAway2013/p/5788290.html
Copyright © 2020-2023  润新知