ftp 递归下载文件 下载过了就不在下载了


package com.bailiangroup.bigdata.utils;

import java.io.IOException;
import java.net.SocketException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;

public class FTPUtil{
	private static  Log logger = LogFactory.getLog(FTPUtil.class);
	public static FTPClient getFTPClient(String ftpHost, String ftpUserName,String ftpPassword, int ftpPort) {  
        FTPClient ftpClient = null;  
        try {  
            ftpClient = new FTPClient();  
            ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器  
            ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器  
            if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {  
                logger.info("未连接到FTP,用户名或密码错误。");  
                ftpClient.disconnect();  
            } else {  
                logger.info("FTP连接成功。");  
            }  
        } catch (SocketException e) {  
            e.printStackTrace();  
            logger.info("FTP的IP地址可能错误,请正确配置。");  
        } catch (IOException e) {  
            e.printStackTrace();  
            logger.info("FTP的端口错误,请正确配置。");  
        }  
        return ftpClient;  
    }  
}

package com.bailiangroup.bigdata.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;

public class FtpFileDownloadUtil{
	private static Log log = LogFactory.getLog(FtpFileDownloadUtil.class);
	private String ftpHost;
	private String ftpUserName;
	private String ftpPassword;
	private int ftpPort;
	private String remotePath;
	private String localPath;
	private String fileName;
	FTPClient ftpClient = null;

	public FtpFileDownloadUtil( String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,String remotePath,String localPath){
		this.ftpHost = ftpHost;
		this.ftpUserName = ftpUserName;
		this.ftpPassword = ftpPassword;
		this.ftpPort = ftpPort;
		this.remotePath = remotePath;
		this.localPath = localPath;
	}
	
	
	public  void download(){
		try {
			//获得ftp连接
			ftpClient = FTPUtil.getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
			if (ftpClient == null) {
				log.error("连接远程ftp服务失败");
				return;
			}
			ftpClient.enterLocalPassiveMode();
			ftpClient.setFileType(ftpClient.BINARY_FILE_TYPE);
			//从ftp中下载远程目录文件
			downLoadFile(ftpClient, remotePath, localPath);
			
			
		}catch(Exception e){
		 	
		}finally{
			//关闭ftp
			if (ftpClient != null && ftpClient.isConnected()) {
				try {
					ftpClient.disconnect();
				} catch (IOException e) {
				}
			}
			
			
		}
	}
	
	

	/** 
	    * 递归下载文件 
	    *  
	    * @param ftp 
	    * @param remote 
	    * @param local 
	    *  
	    */  
	    
	   private void downLoadFile(FTPClient ftp, String remote, String local)  
	   {  
		   
	       try  
	       {  
	  
	           // 转到指定下载目录  
	    	  
	           ftp.changeWorkingDirectory(remote); 
        	   //System.out.println("remote:" +remote);

	           FTPFile[] files = ftp.listFiles(); 
	           
	           for (FTPFile file : files)  
	           {  
	        	  // System.out.println(file.getName());
	        	 //if(file.getName().contains("2015-11-24")){
	        		   
	        		   if (file.isDirectory())
	        		   {  
	        			   downLoadFile(ftp, remote + file.getName() + "/", local + "/" + file.getName() + "/");
	        		   }  
	        		   else  
	        		   {  
	        			   
	        			   File localFile = new File(local +  File.separator + file.getName());  
	        			   
	        			   if (!localFile.getParentFile().exists())  
	        			   {  
	        				   localFile.getParentFile().mkdirs(); 
	        			   } 
	        			   
	        			  if(!localFile.exists()){
	        				  
	        				  OutputStream is = new FileOutputStream(localFile);  
	        				  // 下载文件  
	        				  ftp.retrieveFile(file.getName(), is);  
	        				  is.close();  
	        			  }
	        			   
  
	        		   }  
	        	   }
	               
	               
	               
	          // }  
	  
	       }  
	       catch (Exception e)  
	       {  
	           e.printStackTrace();  
	       }  
	  
	   }  
	 



		public String getFtpHost() {
			return ftpHost;
		}


		public void setFtpHost(String ftpHost) {
			this.ftpHost = ftpHost;
		}


		public String getFtpUserName() {
			return ftpUserName;
		}


		public void setFtpUserName(String ftpUserName) {
			this.ftpUserName = ftpUserName;
		}


		public String getFtpPassword() {
			return ftpPassword;
		}


		public void setFtpPassword(String ftpPassword) {
			this.ftpPassword = ftpPassword;
		}


		public int getFtpPort() {
			return ftpPort;
		}


		public void setFtpPort(int ftpPort) {
			this.ftpPort = ftpPort;
		}


		public String getRemotePath() {
			return remotePath;
		}


		public void setRemotePath(String remotePath) {
			this.remotePath = remotePath;
		}


		


		public String getLocalPath() {
			return localPath;
		}


		public void setLocalPath(String localPath) {
			this.localPath = localPath;
		}


		public String getFileName() {
			return fileName;
		}


		public void setFileName(String fileName) {
			this.fileName = fileName;
		}


		public FTPClient getFtpClient() {
			return ftpClient;
		}


		public void setFtpClient(FTPClient ftpClient) {
			this.ftpClient = ftpClient;
		}


	
	
	
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值