0. 導入相關依賴
- <!-- FTP -->
- <dependency>
- <groupId>commons-net</groupId>
- <artifactId>commons-net</artifactId>
- <version>3.6</version>
- </dependency>
- <!-- Hutool:一個小而全的Java工具類庫,具體介紹參照附錄1 -->
- <dependency>
- <groupId>cn.hutool</groupId>
- <artifactId>hutool-all</artifactId>
- <version>5.3.7</version>
- </dependency>
- <!-- lombok:通過簡單的注解的形式來幫助我們簡化消除一些必須有但顯得很臃腫的 Java 代碼的工具,需要為idea添加插件,添加方法參照附錄2 -->
- <dependency>
- <groupId>org.projectlombok</groupId>
- <artifactId>lombok</artifactId>
- <version>1.18.16</version>
- </dependency>
1. 文件上傳代碼
- @Component
- @Slf4j
- public class FTPTools {
- /**
- * 文件上傳
- * @param hostname 域名地址
- * @param port 端口號
- * @param username 用戶名
- * @param password 密碼
- * @param fileInfo 待上傳的文件
- * @param uploadPath 待上傳到的路徑
- * @param saveName 預保存的文件名
- * @return
- */
- public static boolean upload(String hostname,int port,String username,String password,String fileInfo,String uploadPath,String saveName){
- boolean flag = false;
- FTPClient ftpClient = null;
- try {
- ftpClient = new FTPClient();
- ftpClient.connect(hostname,port);
- //每次數據連接之前,ftp client告訴ftp server開通一個端口來傳輸數據
- ftpClient.enterLocalPassiveMode();
- //設置二進制傳輸
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- ftpClient.setControlEncoding("UTF-8");
- if(ftpClient.login(username,password)){//若連接成功
- log.info("成功登錄到ftp服務端,開始文件上傳");
- flag = sendFile(ftpClient,fileInfo,uploadPath,saveName);
- }else{
- log.error("登錄到ftp服務端失敗,請檢查用戶名和密碼");
- }
- disconnect(ftpClient);
- }catch (SocketException e) {
- log.error("文件{}上傳失敗:{}",saveName,e.getMessage());
- } catch (IOException e) {
- log.error("文件{}上傳失敗:{}",saveName,e.getMessage());
- } finally {
- }
- return flag;
- }
- /**
- * 文件傳輸
- * @param fileInfo
- * @param uploadPath
- * @param saveName
- * @return
- */
- private static boolean sendFile(FTPClient ftpClient, String fileInfo, String uploadPath, String saveName) throws FileNotFoundException,IOException{
- boolean flag = false;
- try(FileInputStream fileInputStream = new FileInputStream(fileInfo)){
- //檢查工作目錄是否存在
- if(ftpClient.changeWorkingDirectory(uploadPath)){
- if(ftpClient.listFiles(saveName).length != 0){ //檢查文件是否已經存在
- boolean deleteFlag = ftpClient.deleteFile(saveName);
- log.info(deleteFlag?"文件已存在,直接刪除":"存在同名文件且無法刪除,請檢查權限");
- }
- flag = ftpClient.storeFile(saveName,fileInputStream);
- log.info(flag?"文件上傳成功!":"文件上傳失敗!");
- }else{
- log.error("找不到要上傳的目錄");
- }
- }catch (FileNotFoundException e){
- log.error("找不到要上傳的文件{}:{}",fileInfo,e.getMessage());
- throw e;
- }catch (IOException e){
- log.error("文件傳輸異常:{}",e.getMessage());
- throw e;
- }
- return flag;
- }
- /**
- * 斷開ftp連接
- * @param ftpClient
- */
- private static void disconnect(FTPClient ftpClient) {
- if (ftpClient.isConnected()){
- try{
- ftpClient.disconnect();
- log.info("ftp連接已關閉,文件上傳結束");
- }catch (IOException e){
- log.error("ftp連接關閉失敗:{}",e);
- }
- }
- }
- }
2. FTP模擬測試環境搭建
通過FileZilla安裝模擬環境:
a. 打開FileZilla的下載中心,下載服務器
b. 選擇合適的版本后,直接傻瓜式安裝
c. 配置相關數據
相關操作流程如下:
編輯—>用戶
用戶名和密碼粗略設置如下圖所示
通過FTP上傳到的文件位置可按個人情況進行設置,勾選相關權限
以上配置即可滿足測試要求,進一步的東西大家可根據需求自行研究,也歡迎留言交流!
3. 測試代碼
- //ftp配置信息
- String hostname = "127.0.0.1"; //域名地址
- int port = 21; //端口號
- String username = "lmh"; //用戶名
- String password = "123456"; //密碼
- String fileInfo = "E:\\Temporary\\1.file"; //待上傳的文件目錄
- String uploadPath = "/"; //待上傳到的路徑
- String saveName = FTP+ "_" + DateUtil.format(new Date(),"yyyyMMdd"); //預保存的文件名
- FTPTools.upload(hostname, port, username, password, fileInfo, uploadPath, saveName);
4. 測試效果
附錄1 :Hutool
Hutool是一個小而全的Java工具類庫,通過靜態方法封裝,降低相關API的學習成本,提高工作效率,使Java擁有函數式語言般的優雅,讓Java語言也可以“甜甜的”。
Hutool中的工具方法來自每個用戶的精雕細琢,它涵蓋了Java開發底層代碼中的方方面面,它既是大型項目開發中解決小問題的利器,也是小型項目中的效率擔當;
Hutool是項目中“util”包友好的替代,它節省了開發人員對項目中公用類和公用工具方法的封裝時間,使開發專注于業務,同時可以最大限度的避免封裝不完善帶來的bug。
就比如
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
- String date = sdf.format(new Date());
可以通過Hutool簡化為
- String date = DateUtil.format(new Date(),"yyyyMMdd");
類似的例子很多大家可以自己去官網看,文檔清晰明了:https://www.hutool.cn/docs/#/
附錄2:IntelliJ IDEA lombok插件的安裝和使用
到此這篇關于Java使用FTP上傳文件并模擬接受的方法的文章就介紹到這了,更多相關Java FTP上傳文件內容請搜索我們以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持我們!
原文鏈接:https://blog.csdn.net/weixin_45884459/article/details/113742777