Java实现ftp的上传、下载和删除
前期準(zhǔn)備
1. 搭建Ftp服務(wù)器
為了方便本地測試,一開始可以先在本地搭建Ftp服務(wù)器。搭建Ftp服務(wù)器的教程有很多,這里就不多講了,下面是我用到的教程你們可以參考一下。
百度經(jīng)驗(yàn):Win10如何搭建FTP服務(wù)器
要注意幾點(diǎn):
- 權(quán)限分配的時(shí)候要允許“讀和寫”,這樣才可以確保上傳和下載的順利進(jìn)行。
- 不能用匿名登陸,不然會測試的時(shí)候FTPClient會連接不上。
- 搭建完后可以自己先測試一下,用另一臺電腦連接進(jìn)行上傳、下載和刪除等操作。
2. 導(dǎo)入相關(guān)的包
實(shí)現(xiàn)這些功能要用到一個(gè)FTPClient類,需要從外部導(dǎo)入commons-net-3.6包。如果是不是Maven項(xiàng)目,只能從網(wǎng)絡(luò)下載包。下載地址如下:
官網(wǎng)下載地址
如果是Maven項(xiàng)目,只需要添加相關(guān)依賴:
<dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.6</version> </dependency>ps:如果需要其他包的時(shí)候,可以到這個(gè)網(wǎng)站上找相關(guān)依賴怎么寫。
https://mvnrepository.com/
正式開碼
1. Ftp服務(wù)器的連接
連接ftp服務(wù)器之前需要用到以下參數(shù),可以直接寫死,有經(jīng)常更改的需求的話可以選擇從配置文件中讀取。
ps:相關(guān)參數(shù)都填自己的,我這里是為了給個(gè)例子亂填的。
private static FTPClient ftpClient; //創(chuàng)建對象 private static String ip = "192.168.0.1"; //ftp地址 private static Integer port = 21; //ftp默認(rèn)端口號是21 private static String userName = "Veggie"; //用戶名 private static String passWord = "root"; //密碼接下來就是執(zhí)行初始化操作,包括對量初始化、連接和登陸。
無法連接失敗可能的原因:
- 不在同一個(gè)局域網(wǎng)中,要在同一個(gè)局域網(wǎng)中才能連接。
- 顯示連接已經(jīng)被重置,可以選擇用IIS管理器重啟Ftp服務(wù)器。再不行的話,可以先把創(chuàng)建的Ftp刪除再重新創(chuàng)建。
雖然之前試過操作完成之后沒有關(guān)閉連接,但是關(guān)閉連接應(yīng)該還是有一定意義的,還是調(diào)用一下吧。
public static void dropFtpClient() {try {ftpClient.logout(); //退出登陸if (ftpClient.isConnected()) {//檢測是否連接Ftp服務(wù)器ftpClient.disconnect(); //關(guān)閉連接}} catch (IOException e) {e.printStackTrace();} }2. 上傳操作
如果上傳有問題,有可能是沒有開啟給連接者分配“寫”的權(quán)限。
/*** 上傳文件** @param pathname ftp服務(wù)保存地址* @param originfilename 待上傳文件的名稱(絕對地址) ** @return*/ public static boolean uploadFile(String pathname, String originfilename) {boolean is_success = false;InputStream inputStream = null;try {File localFile = new File(originfilename);inputStream = new FileInputStream(localFile);ftpClient.setFileType(FTP.BINARY_FILE_TYPE);ftpClient.changeWorkingDirectory(pathname); //跳轉(zhuǎn)到指定的Ftp文件目錄(相對路徑)is_success = ftpClient.storeFile(localFile.getName(), inputStream);//上傳文件inputStream.close();} catch (Exception e) {e.printStackTrace();}return is_success; }3. 下載操作
這個(gè)下載操作是把該路徑下所有的文件都下載來,也可以根據(jù)自己的需求改寫為下載里面某個(gè)指定的文件。
相應(yīng)的,如果在參數(shù)傳遞沒有問題的情況下出現(xiàn)下載是失敗的情況,就要去看看有沒有“讀”的權(quán)限。
4. 刪除操作
如果上面兩個(gè)操作都沒問題的話,一般刪除也不會有問題。
/** 刪除文件** @param pathName ftp服務(wù)器文件目錄* @param fileName 刪除的文件名* @return*/ public static boolean deleteFile(String pathNmae, String fileName) {boolean is_success = false;try {ftpClient.changeWorkingDirectory(pathNmae);is_success = ftpClient.deleteFile(fileName);//刪除文件} catch (Exception e) {e.printStackTrace();}return is_success; }測試
雖然為了簡化代碼去掉了很多異常情況處理操作,但是在正常情況下還是可以完成上述操作的。有那么多功能總要測試一下,可以看到我們測試的步驟為:
通過觀察控制臺返回的信息,看到在我的電腦上測試是沒有問題,可以到文件夾看看是不是真的成功了。
//看了一下,確實(shí)是成功了的
參考資料
關(guān)于這個(gè)參考資料,我一直都覺得很坑爹,在網(wǎng)上找的資料百分之五六十里面的內(nèi)容都是一樣的,而且都標(biāo)注著原創(chuàng)(說原創(chuàng)起碼要有點(diǎn)自己的東西嘛)。有的還直接把人家的內(nèi)容直接復(fù)制上去,也不標(biāo)注出處,連格式都懶得該一下,我也是醉了,開始莫名反感這種行為。
https://blog.csdn.net/lht931942788/article/details/80278916
總結(jié)
以上是生活随笔為你收集整理的Java实现ftp的上传、下载和删除的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringData JPA条件查询、排
- 下一篇: 解决Java Web项目无法读取配置文件