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;
    }
时间: 2024-11-02 12:49:52

java ftp下载文件的相关文章

Java FTP下载文件以及编码问题小结

问题 之前在开发过程中,遇到了一点问题,我要访问一个FTP服务器去下载文件详细情况如下: 1. 需要传入一个可能为中文的文件名: 2. 通过文件名去FTP上寻找该文件: 3. FTP服务器的命名编码为“GBK”: 思路 1.通过GET方法直接将文件名负载URL后面,但需要通过转码: 2.在Java Controller中收到参数后,进行解码,解码为正常数据: 3.用正常数据再转码为GBK,到Service中去调用FTP即可 4.(因公司安全考虑,我们需要在另一个模块中调用FTP)通过rest接口

FTP下载文件工具类

FTP文件下载需要的jar包commons-net-2.0.jar有时还需要:jakarta-oro.jar 1 package com.wdxc.util; 2 3 import java.io.File; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.OutputStream; 7 import java.util.HashMap; 8 import java.util.Ma

最新---java多线程下载文件

import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; public class Demo { // 定义线程个数 public static int threadCount = 5; public static void main(String[] args) throws Exception { // 1,连接到服务

Python之ftp下载文件测试代码

IT审计中有一个最多的执行步骤就是取证.最近的项目过程中,有需要验证ftp服务机密性的需要,就写了一个ftp访问并下载文件的脚本. 此步骤实现目的有三: 1.ftp是否可以匿名访问到敏感信息. 2.在渗透人员拥有低等.中等技术水平前提下,目标ftp服务器的日志记录.入侵检测等是否会产生记录.阻断及预警功能. 3.也是最重要的,在上述条件下,此举基于可渗透时间.现行部署条件.应对防御未来直接支出代价.数据丢失严重性综合得出判断结论,并据此给出建议. 1 #coding=utf-8 2 import

c#.net从ftp下载文件到本地

c#.net从ftp下载文件到本地    /*首先从配置文件读取ftp的登录信息*/ string TempFolderPath = System.Configuration.ConfigurationManager.AppSettings["TempFolderPath"].ToString(); string FtpUserName = System.Configuration.ConfigurationManager.AppSettings["FtpUserName&q

AIX 用SHELL脚本 自动FTP下载文件

用SHELL脚本 自动FTP下载文件:kaiboss1:/weblogic/bboss> uname -xAIX kaiboss1 3315381580 3 5 00C59CB54C00kaiboss1:/weblogic/bboss> more ./memberupload/memberupload.shcd /weblogic/bboss/memberupload/fileftp -inv 10.1.140.123 <<!>memberfile.loguser ftp31

C#FTP下载文件出现远程服务器返回错误: (500) 语法错误,无法识别命令

如果下载多个文件的时候,有时候莫名其妙的出现500服务器错误,很有可能是没有设置KeepAlive 属性导致的. 出现应用程序未处理的异常:2015/1/6 11:40:56 异常类型:WebException 异常消息:远程服务器返回错误: (500) 语法错误,无法识别命令. 参考:http://www.cnblogs.com/webabcd/archive/2007/01/21/626242.html KeepAlive - 指定连接是应该关闭还是在请求完成之后关闭,默认为true ///

.Net 连接FTP下载文件报错:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy

系统环境: Windows + .Net Framework 4.0 问题描述: C#连接FTP下载文件时,在部分电脑上有异常报错,在一部分电脑上是正常的:异常报错的信息:System.InvalidOperationException: The requested FTP command is not supported when using HTTP proxy 分析过程: 在网上搜索到的解决方案,基本都是将代理置为null:request.Proxy = null; 并没有解释其原因. 调

java实现FTP下载文件

ftp上传下载文件,是遵照ftp协议上传下载文件的,本例仅以下载文件为例. 重要的方法解释: 1.FTP功能相关依赖路径:org.apache.commons.net.ftp.*: 2.ftp默认端口是21,如果非默认端口连接,需指定:ftp.connect(ftphostaddr, 22);//22为端口号 3.ftp.changeWorkingDirectory(ftppath) //实现切换目录 4.FTPFile[] fs = ftp.listFiles(); 获取指定目录下的文件列表