java操作ftp下载文件示例_java

分享到:


    /**
     *
     * JAVA操作 FTP 下载
     * 文件下载。
     *
     */
    private void ftpDownload()
    {
        FTPClient ftpClient = null;
        InputStream input = null;
        boolean loginFlag = false;
        List<String> list = new ArrayList<String>();
        try
        {
            int defaultPort = CommonsMessage.FTP_DEFAULT_PORT; // 21
            int timeout = M400Constant.NUM_SIXTY_THOUSAND * M400Constant.NUM_TWO; // 120000
            ftpClient = new FTPClient();

            ftpClient.setDefaultPort(defaultPort);
            ftpClient.setConnectTimeout(timeout);
//            ftpClient.setSoTimeout(timeout);
            ftpClient.setDefaultTimeout(timeout);
            ftpClient.setDataTimeout(timeout);
            ftpClient.setControlEncoding("UTF-8");
            FTPClientConfig conf = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
            conf.setServerLanguageCode("en");
            conf.setDefaultDateFormatStr("MMM dd HH:mm");
            ftpClient.configure(conf);

            ftpClient.connect(SystemConfig.getKey("scpFtpIp"));
            loginFlag = ftpClient.login(SystemConfig.getKey("scpFtpUserName").trim(),
                    SystemConfig.getKey("scpFtpPassword").trim());
            String ftpDir = SystemConfig.getKey("ftpHangupDir").trim();
            if (!loginFlag)
            {
                DEBUGGER.debug("login scp ftp is :" + loginFlag);
            }
            // String ftpDir = SystemConfig.getKey("ftpHangupDir").trim();

            if (ftpClient.changeWorkingDirectory(ftpDir))
            {
               

                FTPFile file[] = ftpClient.listFiles(ftpDir);

                if (file != null && file.length > 0)
                {
                    DEBUGGER.debug("hungup file size is:  " + file.length);
                    for (int i = 0; i < file.length; i++)
                    {
                        String fileName = file[i].getName();
                        ftpClient.setBufferSize(CommonsMessage.ONE_K_BUFFER_SIZE);

                        // 设置文件类型(二进制)
                        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

                        input = ftpClient.retrieveFileStream(fileName);
                        processInput(ftpClient, input, list, fileName);

                        // if (downFlag) {
                        // ftpClient.deleteFile(fileName);
                        // }
                    }
                }
                else
                {
                    try
                    {
                        Thread.sleep(M400Constant.NUM_FIVE_THOUSAND);
                    }
                    catch (InterruptedException e)
                    {
                        /*
                         * if (DEBUGGER.isDebugEnable()) {
                         * DEBUGGER.debug("Failed to queryScpToQuery", e); }
                         */
                        error("Failed to queryScpToQuery", e);
                    }
                }

            }
            else
            {
                DEBUGGER.debug("scp dir is error ");
            }

        }
        catch (Exception e)
        {
            /*
             * DEBUGGER.debug("dowonload file is faild  ", e);
             */
            error("dowonload file is faild  ", e);
        }
        finally
        {
            close(input, "close inputStream  is faild  ");
            if (ftpClient != null)
            {
                try
                {
                    deleteFile(ftpClient, list);
                    boolean logoutFlag = false;
                    try
                    {
                        logoutFlag = ftpClient.logout();
                        // DEBUGGER.debug("logout : " + logoutFlag);
                    }
                    catch (Exception e)
                    {
                        /*
                         * DEBUGGER.debug("logout : " + logoutFlag);
                         */
                        error("logout : " + logoutFlag, e);
                    }
                    ftpClient = null;
                }
                catch (Exception e)
                {
                    /*
                     * if (DEBUGGER.isDebugEnable()) {
                     * DEBUGGER.error("Failed to ftpDownload", e); }
                     */
                    error("Failed to ftpDownload", e);
                }
                // try {
                // ftpClient.disconnect();
                // } catch (IOException e) {
                // if (DEBUGGER.isDebugEnable()) {
                // DEBUGGER.debug("Failed to ftpDownload", e);
                // }
                // }
            }
        }
    }

    /**
     * 处理ftp对应文件输入流。
     *
     * @param ftpClient
     *            ftp客户端对象
     * @param input
     *            ftp文件输入流
     * @param list
     *            处理完毕的文件列表,用于执行文件删除使用
     * @param fileName
     *            当前处理的文件名称
     */
    private void processInput(FTPClient ftpClient, InputStream input, List<String> list, String fileName)
    {
        if (input == null)
        {
            return;
        }
        // boolean downFlag = callingService(input);
        callingService(input);
        try
        {
            input.close();
            ftpClient.completePendingCommand();
            list.add(fileName);
        }
        catch (Exception e)
        {
            /*
             * DEBUGGER.debug("Failed to ftpDownload", e);
             */
            error("Failed to ftpDownload", e);
        }
    }
}

昵    称:
验证码:

相关文档:

  • Java中String.format的使用
    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的读者应该记得C语言的sprintf()方法,两者有类似之处...
  • 手拉手业务基础平台hihsoft-sso
    Hihsoft-sso前身是javahih研发团队从多个大型项目实施过程中,精练提取出来的一个开源的信息化管理系统基础框架。我 们本着取之于开源...
  • Java内存文件系统:Jimfs
    Jimfs 是一个用于 Java 7+ 的内存中的文件系统,实现了 java.nio.file 抽象文件系统 API。Jimfs 支持几乎所有 java.nio.file下的APIs。...
  • JavaFX平台特性
    Oracle在JDK8和JDK9的规划中提高了JavaFX所占的比重,JavaFX也将做为JDK的一部分直接集成。那么JavaFX有什么特性呢?...
  • JavaFX之Pagination的使用
    Pagination是JavaFX 2.2中新增加的一个分页控件,非常的简单易用。...
  • FileUtils扩展readURLtoString读取url内容_java
    这篇文章主要介绍了FileUtils扩展readURLtoString使用其支持读取URL内容为String,支持带POST传大量参数,大家参考使用吧...
  • 使用java为pdf添加书签的方法(pdf书签制作)_java
    下载一些pdf格式的电子书没有书签,用JAVA写了一个小工具,将特定格式的文本解析成为书签,然后保存到pdf格式中...
  • Java内存分配分析器:Aprof
    Aprof项目是Java内存分配探查与分析的应用程序。可用于(并使用)在生产环境中高负荷服务器端应用程序,该应用程序拥有非常低的性能...
  • Java中 shuffle 算法的使用_java
    本篇文章,小编将为大家介绍,在Java中 shuffle 算法的使用,有需要的朋友可以参考一下...
  • 有关于整体刷新和局部刷新frameset窗口_java
    本篇小编为大家介绍有关于整体刷新和局部刷新frameset窗口的方法,希望对有需要的朋友有所帮助。...
  • java简单的FTP客户端
    某些数据交换,我们需要通过ftp来完成。 sun.net.ftp.FtpClient 可以帮助我们进行一些简单的ftp客户端功能:下载、上传文件。...
  • Java String.format 方法使用介绍
    String类,在JDK1.5中增 加了一个非常有用的静态函数format(String format, Objece... argues),可以将各类数据格式化为字符串并输出。其中format...
  • Java中的final关键字详细介绍_java
    这篇文章主要介绍了Java中的final关键字,有需要的朋友可以参考一下...
  • Java中instanceof关键字的用法总结_java
    instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它...
  • Java之JFrame输出Helloworld实例_java
    这篇文章主要介绍了Java之JFrame输出Helloworld的方法,以输出Helloworld的实例分析了JFrame的简单入门技巧,需要的朋友可以参考下...
  • Java 反射机制[Field反射]
    反射就是把Java类中的各种成分映射成相应的Java类。例如一个Java类中用一个Class类的对象来表示。一个类中的组成部分分为成员变...
  • 文件系统API EntityFS
    EntityFS是一个Java版的面向对象文件系统的API。它拥有一套丰富的功能强大的文件和目录操作的工具,使它更容易将文件系统实体转化为Jav...
  • Java Collections Framework之Vector
    capacityIncrement:每次数组扩充的个数,如果为0,新容量是原来的2倍, 如果不为0,新容量为原来的容量加上此长度,代码体现在...
  • Java Bean脚本框架 BSF
    BSF (Bean Scripting Framework) 是一组 Java 的类用来在 Java 的程序中支持脚本语言,可在脚本语言中访问 Java 的对象和方法。BSF 支持多种脚本语...
  • 解决JSTL foEach标签 刷新报错的方法_java
    本篇文章是对JSTL foEach标签刷新报错的方法进行了详细的分析介绍,需要的朋友参考下...