• 技术文章 >java >java下载

    java如何使用FTP下载

    小妮浅浅小妮浅浅2021-02-22 11:48:57原创5415

    在进行文件的下载时,我们大多数选的是FTP文件传输的方法,相信大家对这种下载方式还是比较熟悉的。那么有没有试过用java语言,来操作FTP进行下载呢?本篇主要对FTP做了简要的说明,然后对FTP下载思路进行梳理,最后带来FTP下载文件的实例代码展示。

    1、FTP说明

    FTP是文件传输协议FileTransferProtocol的英文缩写,它是一种TCP/IP协议,属于TCP/IP协议组。双向传送控制文件。与此同时,它也是一种应用(应用程序)。根据不同的操作系统,FTP应用程序各不相同,而且所有这些应用程序都遵循用于传输文件的相同协议。该协议由两部分组成,一是FTP服务器,二是FTP客户端。

    2、下载思路

    (1)设置文件类型(二进制)

    (2)处理ftp对应文件输入流,ftp客户端对象和 ftp文件输入流

    (3)处理完毕的文件列表,用于执行文件删除使用

    (4)处理当前的文件名称

    3、FTP下载实例

        /**
         *
         * 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使用FTP下载的方法,大家学会以后可以尝试这种方法,对文件进行一个下载,然后对比与以前下载方式的效率。更多Java学习指路:java下载

    专题推荐:java ftp下载
    上一篇:java中Servlet程序下载文件 下一篇:java如何下载web文件

    相关文章推荐

    • Java之jvm的执行程序过程• java数组中如何对内存进行回收?• Java字节码中jvm的使用• java之JVM方法区的用法• java如何使用流对数组排序

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网