FTP的下载(java)

张沐晗 2017-04-27 02:52:14
项目要求是每周定时去FTP服务器去拉取客户上传上的zip文件,网上百度了,有点乱,求大神指点!!!在线等!!!
...全文
133 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
一个治疗术 2017-04-27
  • 打赏
  • 举报
回复

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

/**
 * FTP文件操作工具类
 * 
 * @author liusy14
 *
 */
public class FileFTPUtil {
	
   
	/**
	 * 文件上传
	 * @param url FTP服务器hostname 
	 * @param port FTP服务器端口
	 * @param username FTP登录账号 
	 * @param password FTP登录密码  
	 * @param path FTP服务器保存目录 
	 * @param filename 上传到FTP服务器上的文件名 
	 * @param input  输入流 
	 * @return 是否成功
	 * @throws IOException 
	 */
    public static boolean uploadFile(  
            String url,//FTP服务器hostname   
            int port,//FTP服务器端口  
            String username, // FTP登录账号   
            String password, //FTP登录密码  
            String path, //FTP服务器保存目录  
            String filename, //上传到FTP服务器上的文件名   
            InputStream input // 输入流   
            ) throws IOException 
    {    
        boolean success = false;    
        
        
        FTPClient ftp = new FTPClient();    
        try {    
            int reply;    
            ftp.connect(url, port);//连接FTP服务器     
            //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器     
            ftp.login(username, password);//登录   
            //ftp.setBufferSize(1024);
            reply = ftp.getReplyCode();
            // 设置PassiveMode传输
            // ftp.enterLocalPassiveMode();
             // 设置以二进制流的方式传输
             ftp.setFileType(FTP.BINARY_FILE_TYPE);
             //获取FTP服务器字符编码,然后设置上传文件的编码与ftp一致
          //   ftp.setControlEncoding( ftp.getControlEncoding());
             ftp.setControlEncoding("GBK");
            if (!FTPReply.isPositiveCompletion(reply)) {    
                ftp.disconnect();    
                return success;    
            }    
            ftp.changeWorkingDirectory(path);    
            ftp.storeFile(filename, input);             
            input.close();    
            ftp.logout();    
            success = true;    
            
        } catch (IOException e) {    
            e.printStackTrace();    
        } finally {    
            if (ftp.isConnected()) {    
                try {    
                    ftp.disconnect();    
                } catch (IOException ioe) {    
                }    
            }    
        }    
        return success;    
    }   
	
	
    
    /**   
     * Description: 从FTP服务器下载文件   
     * @Version1.0   
     * @param url FTP服务器hostname   
     * @param port FTP服务器端口   
     * @param username FTP登录账号   
     * @param password FTP登录密码   
     * @param remotePath FTP服务器上的相对路径   
     * @param fileName 要下载的文件名   
     * @param localPath 下载后保存到本地的路径   
     * @return   
     */    
    public static boolean downFile(  
            String url, //FTP服务器hostname  
            int port,//FTP服务器端口  
            String username, //FTP登录账号  
            String password, //FTP登录密码  
            String remotePath,//FTP服务器上的相对路径   
            String fileName,//要下载的文件名  
            String localPath//下载后保存到本地的路径  
            ) {    
        boolean success = false;    
        FTPClient ftp = new FTPClient();    
        
        
        ftp.setBufferSize(10*1024);//设置文件传输速度
        //存储文件信息  应该差一个文件信息表 未知
       // List<Object> fileInfo=new ArrayList<>();
        
        
        try {    
            int reply;    
            ftp.connect(url, port);    
            //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器     
            ftp.login(username, password);//登录     
            reply = ftp.getReplyCode();    
            if (!FTPReply.isPositiveCompletion(reply)) {    
                ftp.disconnect();    
                return success;    
            }    
            ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录     
            FTPFile[] fs = ftp.listFiles();    
            
            
            for(FTPFile ff:fs){    
                if(ff.getName().equals(fileName)){    
                    File localFile = new File(localPath+"/"+ff.getName());   
                    OutputStream is = new FileOutputStream(localFile);     
                    ftp.retrieveFile(ff.getName(), is);    
                    is.close();    
                }    
            }    
            ftp.logout();    
            success = true;    
        } catch (IOException e) {    
            e.printStackTrace();    
        } finally {    
            if (ftp.isConnected()) {    
                try {    
                    ftp.disconnect();    
                } catch (IOException ioe) {    
                }    
            }    
        }    
        return success;    
    }  
    
    /**
	 * 删除本地文件夹下的所有文件  (包括文件夹)
	 * @param f
	 */
	public static void recurDelete(File f){
	    for(File fi:f.listFiles()){
	        if(fi.isDirectory()){
	            recurDelete(fi);
	        }
	        else{
	            fi.delete();
	        }
	    }
	    f.delete();
	}

51,411

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧