码迷,mamicode.com
首页 > 编程语言 > 详细

java ftp上传下载

时间:2016-04-20 17:51:51      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:

   /**
    * Description: 从FTP服务器下载文件
    * @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 ip, int port,String username, String password, String remotePath,String fileName,String localPath) { 
        boolean success = false; 
        FTPClient ftpc = new FTPClient(); 
        try { 
        	logger.info("连接ftp----");
            int reply; 
            ftpc.connect(ip,port); 
            logger.info("--------------连接ftp成功--------------");
            //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器 
            ftpc.login(username, password);//登录 
            reply = ftpc.getReplyCode(); 
            if (!FTPReply.isPositiveCompletion(reply)) { 
                ftpc.disconnect(); 
                return success; 
            } 
            //
        	logger.info("登录ftp成功!!!!!!!!!!!!!!");
            ftpc.changeWorkingDirectory(remotePath);//转移到FTP服务器目录 
            ftpc.enterLocalPassiveMode(); //设置被动模式
            logger.info("切换路径:"+remotePath);
            FTPFile[] fs = ftpc.listFiles();
            logger.info("文件数量1:"+fs.length);
            
            for(FTPFile ff:fs){ 
            	logger.info("文件名称:"+ff.getName());
                if(ff.getName().equals(fileName)){ 
                    File localFile = new File(localPath+"/"+ff.getName()); 
                     
                    OutputStream is = new FileOutputStream(localFile);  
                    ftpc.retrieveFile(ff.getName(), is); 
                    is.close(); 
                    logger.info("下载完毕----");
                } 
            } 
             
            ftpc.logout(); 
            success = true; 
        } catch (IOException e) { 
            //e.printStackTrace(); 
        	logger.error("ftp下载报错", e);
        } finally { 
            if (ftpc.isConnected()) { 
                try { 
                    ftpc.disconnect(); 
                } catch (IOException ioe) { 
                } 
            } 
        } 
        return success; 
    }

  如上代码,ftp上传下载其实很简单,但是有时候相信有的人很困惑,为什么服务器上的路径是对的,反而上传或者下载文件都是失败的或者获取为空。

这是因为ftp的ip的问题,如果ip没有经过防火墙的路由,我们上传下载,直接不需要设置,因为ftpclient默认为主动模式,客户端主动向服务器端发起申请。

但是如果ip穿过防火墙,经过路由了,这时候我们需要注意了,我们再去使用默认下载或者上传,会发生问题。这时候我们需要使用被动模式了。

enterLocalPassiveMode:设置客户端PASV模式
static int PASSIVE_LOCAL_DATA_CONNECTION_MODE
enterLocalActiveMode:设置客户端PORT模式
static int ACTIVE_LOCAL_DATA_CONNECTION_MODE

FTP传输有两种模式:主动模式(PORT)和被动模式(PASV)

java ftp上传下载

标签:

原文地址:http://www.cnblogs.com/shunxiyuan/p/5413420.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!