JAVA操作 FTP 下载文件

jopen 11年前

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