java如何使用FTP下载

美女程序员鼓励师

在进行文件的下载时,我们大多数选的是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下载 的全部内容, 来源链接: utcz.com/z/543351.html

回到顶部