java ftp下载文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java ftp下载文件相关的知识,希望对你有一定的参考价值。

1、使用官方正规的jar

commons-net-1.4.1.jar

jakarta-oro-2.0.8.jar

注意:使用ftp从windows服务器下载文件和从linux服务器下载文件不一样

2、用ftp从linux服务器下载文件

System.out.println(new Date()+"  开始进入ftpDownload定时器");
        
        //ftp服务器登录凭证
        String host=PropertiesManager.getProperty("ftpHost");
        int port=Integer.parseInt(PropertiesManager.getProperty("ftpPort"));
        String user=PropertiesManager.getProperty("ftpUser");
        String password=PropertiesManager.getProperty("ftpPassword");
        
        //获取时间字段信息
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyyMMdd");
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
        Date date=new Date();
        String today1 = sdf1.format(date);
        String today = sdf.format(date);
                
        String txtFileDir="/";
        String txtSaveDir="E:/dataCenter/shengzhan/";
        
        //检查本地磁盘目录是否存在txt文件
        boolean flag = isTxtExit(today1,txtSaveDir);
        System.out.println(new Date()+"  判断txt文件是否存在:"+flag);
        FlagUtil.ftpDownloadRunning=true;
        
        //讲txt的下载操作和解析操作分成2个独立的操作进行,排除互相间的干扰
        if(flag==false)//文件不存在进行ftp下载操作
        {
            FTPClient ftp=null;            
            try
            {
                //ftp的数据下载
                ftp=new FTPClient();
                ftp.connect(host, port);   
                ftp.login(user, password);
                ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
                
                //设置linux环境
                FTPClientConfig conf = new FTPClientConfig( FTPClientConfig.SYST_UNIX);
                ftp.configure(conf);
                
                //判断是否连接成功
                int reply = ftp.getReplyCode();
                if (!FTPReply.isPositiveCompletion(reply))
                {
                    ftp.disconnect();
                    System.out.println("FTP server refused connection.");
                    return;
                }
                
                //设置访问被动模式
                ftp.setRemoteVerificationEnabled(false);
                ftp.enterLocalPassiveMode();
                
                
                //检索ftp目录下所有的文件,利用时间字符串进行过滤
                boolean dir = ftp.changeWorkingDirectory(txtFileDir);
                if (dir) 
                { 
                    FTPFile[]fs = ftp.listFiles(); 
                    for(FTPFile f:fs)
                    { 
                          if(f.getName().indexOf(today1+"2000")>0)
                          {  
                              System.out.println(new Date()+"  ftpDownload定时器下载txt成功");        
                              File localFile = new File(txtSaveDir+f.getName());    
                              OutputStream ios = new FileOutputStream(localFile);     
                              ftp.retrieveFile(f.getName(), ios);  
                              ios.close();   
                              break;
                           }    
                    }
                }
            } 
            catch (Exception e)
            {
                e.printStackTrace();
                System.out.println(new Date()+"  ftp下载txt文件发生错误");
            }
            finally
            {
                if(ftp != null)  try {ftp.disconnect();} catch (IOException ioe) {}  
            }

3、使用ftp从windows服务器下载文件

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();    
        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;    
            }   
            System.out.println("aaa");
            ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录     
            FTPFile[] fs = ftp.listFiles();  
            
            for(FTPFile ff:fs){ 
             System.out.println("bb" + fs);
             
                if(ff.getName().equals(fileName)){  
                 System.out.println("dd");
                    File localFile = new File(localPath+"/"+ff.getName());    
                    OutputStream is = new FileOutputStream(localFile);     
                    ftp.retrieveFile(ff.getName(), is);  
                    System.out.println("ccc" +ff.getName()+fileName);
                    is.close();    
                }    
            }    
            ftp.logout();    
            success = true;    
        } catch (IOException e) {    
            e.printStackTrace();    
        } finally {    
            if (ftp.isConnected()) {    
                try {    
                    ftp.disconnect();    
                } catch (IOException ioe) {    
                }    
            }    
        }    
        return success;    
    }

 

以上是关于java ftp下载文件的主要内容,如果未能解决你的问题,请参考以下文章

Java代码实现FTP单个文件下载

Java ftp 上传文件和下载文件

我的代码库-Java8实现FTP与SFTP文件上传下载

java在浏览器上获取FTP读文件路径

java实现ftp文件的上传与下载

Java 实现ftp 文件上传下载和删除