• 技术文章 >java >java下载

    java如何使用FTP下载

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

    在进行文件的下载时,我们大多数选的是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下载实例

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

    116

    117

    118

    119

    120

    121

    122

    123

    124

    125

    126

    127

    128

    129

    130

    131

    132

    133

    134

    135

    136

    137

    138

    139

    140

    141

    142

    143

    144

    145

    146

    147

    148

    149

    150

    151

    152

    153

    154

    155

    156

    157

    158

    159

    160

    161

    162

    163

    164

    165

    166

    167

    168

    169

    170

    171

        /**

         *

         * 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学习网