您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java怎么實現FTP服務器的文件上傳和下載”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java怎么實現FTP服務器的文件上傳和下載”吧!
由于業務需求,需要實現 ftp server 的文件上傳和下載功能。于是便借助了 apache 的一個工具包 commons-net。使用起來很簡單,但是有些細節比較坑,特此說明一下。
第三方包的核心工具類是 FTPClient ,不管是文件上傳還是文件下載,都要進行連接和登錄,具體會在代碼中體現出來。
引入 maven 依賴
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.6</version> </dependency>
ftp 服務器的連接信息
主機名
端口
用戶名
密碼
如果需要自己搭建和配置文件服務器,請自行百度
常用命令 rm -rf 目錄名稱 mkdir 目錄名稱 創建目錄 touch 文件名 新建文件 cd 目錄名稱 切換目錄 kill -9 進程ID 殺死進程 chmod 配置權限
文件上傳其實就是把我們本地的文件,放到文件服務器指定的目錄下。 想象一下,如果我們此時在一臺 linux 服務器上新建一個文件夾和文件,該如何操作?
創建文件夾 mkdir 文件夾名稱
進入到文件夾中 cd 文件夾名稱
新建文件 touch 文件名稱
其實 FTPClient 實現文件上傳的代碼也是這個意思,其中用到的方法主要是:
makeDirectory(path)
changeWorkingDirectory(path)
storeFile(remoteFilename, inputStream);
分別對應上面的三個步驟。
以下是完整代碼,但是有幾個細節需要說明:
確保登錄用戶擁有足夠的權限,比如讀寫文件。
makeDirectory 方法無法創建多級目錄,只能一層一層創建。
創建文件失敗可能是用戶沒有權限,也可能是目錄已存在。
中文亂碼問題看代碼
public static void main(String[] args) { FTPClient ftpClient = new FTPClient(); try { // 1. 連接登錄 ftpClient.connect("主機名", 端口); boolean loginSuccessful = ftpClient.login("用戶名", "密碼!"); System.out.println(loginSuccessful ? "登錄成功" : "登錄失敗"); String remotePath = "中文目錄";// 上傳的文件所在目錄 String remotePathAfterTransferCode = new String(remotePath.getBytes("utf-8"), "iso-8859-1");// 防止中文亂碼 String localFile = "/Users/zzz/Desktop/ftp-server/perfect.txt";// 本地待上傳的文件 String remoteFilename = "remoteFile.txt";// 上傳后 ftp server 的文件名稱 // 2. 在 ftp server 上創建文件夾 boolean makeDirSuccessful = ftpClient.makeDirectory(remotePathAfterTransferCode); System.out.println("創建文件夾是否成功? " + makeDirSuccessful); // 3. 切換目錄 boolean changeWorkingDirectorySuccessful = ftpClient.changeWorkingDirectory(remotePathAfterTransferCode); System.out.println(changeWorkingDirectorySuccessful ? "切換目錄成功" : "切換目錄失敗"); // 4. 上傳本地文件到 ftp server boolean uploadSuccessful = ftpClient.storeFile(remoteFilename, new FileInputStream(new File(localFile))); System.out.println(uploadSuccessful ? "上傳成功" : "上傳失敗"); // 5. 退出登錄 ftpClient.logout(); } catch (Exception e) { e.printStackTrace(); } }
文件下載也是需要用戶先連接登錄,然后才能下載。
核心方法就是 retrieveFile("服務器文件地址", 輸出流);
具體代碼如下:
public static void main(String[] args) { FTPClient ftpClient = new FTPClient(); // 指定本地下載目錄 String localPath = "/Users/zzz/Desktop/ftp-server"; try { ftpClient.connect("主機名", 21); boolean loginSuccess = ftpClient.login("用戶名", "密碼!"); System.out.println(loginSuccess ? "登錄成功" : "登錄失敗"); // 文件下載 File localFile = new File(localPath + File.separatorChar + "ttt.txt"); OutputStream os = new FileOutputStream(localFile); boolean downloadSuccessful = ftpClient.retrieveFile("test.txt", os); os.close(); System.out.println(downloadSuccessful ? "下載成功!" : "下載失敗!"); ftpClient.logout(); } catch (Exception e) { e.printStackTrace(); } }
FTPClient 實現文件上傳和下載的方法很簡單易懂,只是有些細節需要注意(常見的前面已經提到),當然上述的代碼只是 demo 版, 具體的需求還要去優化,比如異常處理,如何創建多級文件夾之類的,最后就是需要定制配置 FTPClient ,比如編碼之類的, 具體 API 自行查閱資料。
感謝各位的閱讀,以上就是“Java怎么實現FTP服務器的文件上傳和下載”的內容了,經過本文的學習后,相信大家對Java怎么實現FTP服務器的文件上傳和下載這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。