Home  >  Article  >  Java  >  How to use FTP download in java

How to use FTP download in java

王林
王林forward
2023-05-13 10:31:051583browse

1. FTP description

FTP is the English abbreviation of FileTransferProtocol. It is a TCP/IP protocol and belongs to the TCP/IP protocol group. Transfer control files in both directions. At the same time, it is also an application (application). FTP applications vary depending on the operating system, and all of them follow the same protocol for transferring files. The protocol consists of two parts, one is the FTP server and the other is the FTP client.

2. Download ideas

(1) Set the file type (binary)

(2) Process the ftp corresponding file input stream, ftp client Object and ftp file input stream

(3) Processed file list, used to perform file deletion using

(4) Process the current file name

3. FTP download example

    /**
     *
     * 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);
        }
    }
}

The above is the detailed content of How to use FTP download in java. For more information, please follow other related articles on the PHP Chinese website!

Statement:
This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete