1. FTP の説明
FTP は、FileTransferProtocol の英語の略称で、TCP/IP プロトコルの 1 つであり、TCP/IP プロトコル グループに属します。制御ファイルを両方向に転送します。同時にそれは応用(アプリケーション)でもあります。 FTP アプリケーションはオペレーティング システムによって異なりますが、すべてのアプリケーションは同じプロトコルに従ってファイルを転送します。プロトコルは 2 つの部分で構成され、1 つは FTP サーバー、もう 1 つは 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ダウンロードを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。