您好,登錄后才能下訂單哦!
這篇文章主要介紹了Java怎么讀取傳輸FTP文件的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇Java怎么讀取傳輸FTP文件文章都會(huì)有所收獲,下面我們一起來看看吧。
FTP作為文件服務(wù)器,由提供服務(wù)方提供遠(yuǎn)程連接地址,連接端口,賬號(hào),密碼等信息。
根據(jù)以上信息可以建立客戶端連接,隨后對(duì)于建立好的連接可進(jìn)行文件讀取,文件上傳等操作
<!-- FTP相關(guān)操作的依賴 --> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.9.0</version> </dependency> <!-- IO工具類的依賴 --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> <!-- lombok依賴 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> <scope>provided</scope> </dependency>
ftp: config: host: ${env.ftp.config.host:10.1.1.1} port: ${env.ftp.config.port:12345} username: ${env.ftp.config.username:ftpUsername} password: ${env.ftp.config.password:ftpPwd} remote-dir-path: ${env.ftp.config.remote-dir-path:/}
/** * @author: Vainycos * @description ftp配置信息 * @date: 2023/4/17 15:16 */ @Data @Component @ConfigurationProperties("ftp.config") public class FtpConfig { private String host; private int port; private String username; private String password; /** 初始讀取根目錄,當(dāng)前默認(rèn)/ */ private String remoteDirPath; }
/** * 獲取ftp客戶端 * @return */ public FTPClient getFtpClient(){ try { FTPClient ftpClient = new FTPClient(); ftpClient.connect(ftpConfig.getHost() ,ftpConfig.getPort()); // 10分鐘連接時(shí)間 ftpClient.setConnectTimeout(600000); ftpClient.setDefaultTimeout(600000); ftpClient.login(ftpConfig.getUsername() ,ftpConfig.getPassword()); // login后設(shè)置傳輸?shù)哪J? ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // login后設(shè)置被動(dòng)模式 ftpClient.enterLocalPassiveMode(); // login后設(shè)置編碼 String LOCAL_CHARSET = "GBK"; // 開啟服務(wù)器對(duì)UTF-8的支持,如果服務(wù)器支持就用UTF-8編碼,否則就使用本地編碼(GBK). if (FTPReply.isPositiveCompletion(ftpClient.sendCommand("OPTS UTF8", "ON"))) { LOCAL_CHARSET = "UTF-8"; } ftpClient.setControlEncoding(LOCAL_CHARSET); if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) { log.error("未連接到FTP,用戶名或密碼錯(cuò)誤!"); ftpClient.disconnect(); } else { log.info("FTP連接成功!"); } // 切換從某個(gè)根目錄下開始掃描 ftpClient.changeWorkingDirectory(ftpConfig.getRemoteDirPath()); return ftpClient; }catch (IOException e) { log.error("ftp建立連接異常->{}", e); } return null; }
/** * 獲取對(duì)應(yīng)目錄下的第一級(jí)目錄文件 * @param ftpClient client * @throws IOException */ public void getFtpFirstDirectoryFiles(FTPClient ftpClient) throws IOException { log.info("ftpclient當(dāng)前工作目錄->{}", ftpClient.printWorkingDirectory()); if (ftpClient != null) { FTPFile[] files = ftpClient.listFiles(); for (FTPFile file : files) { String fileName = file.getName(); if (file.isDirectory()){ // 每次從根目錄下查找第一級(jí)目錄 String firstDirectory = ftpConfig.getRemoteDirPath() + "/" + fileName; ftpClient.changeWorkingDirectory(firstDirectory); log.info("當(dāng)前目錄->{}, 開始掃描錄音文件", firstDirectory); // 切換目錄后直接遍歷第一級(jí)的文件,不遞歸第二級(jí)目錄 dealFile(ftpClient); log.info("{}->目錄掃描結(jié)束", firstDirectory); } } } } /** * 處理目錄下的文件 * @param ftpClient * @throws IOException */ public void dealFile(FTPClient ftpClient) throws IOException { FTPFile[] files = ftpClient.listFiles(); for (FTPFile file : files) { String fileName = file.getName(); if (file.isDirectory()) { log.info("{}->為目錄,跳過", fileName); continue; } String rootWorkingDirectory = ftpClient.printWorkingDirectory(); log.info("獲取到文件->{}, 開始獲取ftp文件流, ftpclient工作目錄->{}", fileName, ftpClient.printWorkingDirectory()); // 開始獲取ftp文件流 InputStream inputStream = ftpClient.retrieveFileStream(new String(fileName.getBytes("UTF-8"), FTP.DEFAULT_CONTROL_ENCODING)); if (inputStream == null){ log.error("文件不存在->{}", fileName); return; } byte[] data = IOUtils.toByteArray(inputStream); inputStream.close(); // 關(guān)鍵代碼,如果不執(zhí)行該代碼,后續(xù)的ftpClient操作將會(huì)不生效 ftpClient.completePendingCommand(); // 省略...獲取到了inputStream 文件流進(jìn)行后續(xù)處理 } }
/** * 關(guān)閉FTP服務(wù)連接 * @param ftpClient */ public void disConnection(FTPClient ftpClient) { try{ if(ftpClient.isConnected()){ ftpClient.disconnect(); } }catch(IOException e) { log.error("ftpClient.disconnect失敗->{}", e); } }
關(guān)于“Java怎么讀取傳輸FTP文件”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“Java怎么讀取傳輸FTP文件”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。