您好,登錄后才能下訂單哦!
怎么在java中使用FTP下載文件?相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
Java的特點有哪些 1.Java語言作為靜態面向對象編程語言的代表,實現了面向對象理論,允許程序員以優雅的思維方式進行復雜的編程。 2.Java具有簡單性、面向對象、分布式、安全性、平臺獨立與可移植性、動態性等特點。 3.使用Java可以編寫桌面應用程序、Web應用程序、分布式系統和嵌入式系統應用程序等。
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下載文件的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。