Java - FTP自動建立目錄及CDUP指令操作

在這邊簡單的提到,如果我們要將檔案上傳到FTP上面,假如FTP端的相關目錄不存在的話,

該怎麼處理的簡單議題,並且提到如何回上一層目錄等指令!

在這邊使用的套件為:FTPClient - EnterpriseDT

首先先自行架設FTP Server,設定好一帳號可連線到一HOME目錄!


一、連線登入的操作

  1. private static FTPClient ftp;
  2. static String FTP_SERVER="127.0.0.1";
  3. static String FTP_ID="test";
  4. static String FTP_PW="test";
  5. static String FTP_DIR = "FTPTest";
  6. public static void main(String[] args) {
  7. ftp=new FTPClient();
  8. System.out.println("正在連線到...." + FTP_SERVER);
  9. try {
  10. ftp.setRemoteHost(FTP_SERVER);
  11. ftp.connect();
  12. ftp.login(FTP_ID,FTP_PW);
  13. ftp.setConnectMode(FTPConnectMode.PASV);
  14. ftp.setType(FTPTransferType.BINARY);
  15. System.out.println("切換目錄到:"+FTP_DIR);
  16. ftp.chdir(FTP_DIR);
  17. System.out.println("連線成功....");
  18. //上傳檔案部分(請見下一段程式碼)
  19. } catch (Exception e) {
  20. // TODO Auto-generated catch block
  21. e.printStackTrace();
  22. } finally{
  23. try {
  24. ftp.quit();
  25. System.out.println("關閉FTP連線!!");
  26. } catch (IOException e) {
  27. // TODO Auto-generated catch block
  28. e.printStackTrace();
  29. } catch (FTPException e) {
  30. // TODO Auto-generated catch block
  31. e.printStackTrace();
  32. }
  33. }
  34. }

上面的程式主要是說明如何登入到您指定的FTP Server並且切換到您要進入的目錄!

二、上傳檔案部分

  1. String local_path = "C://example.doc";
  2. String remote_path[] = {"TYPE_2//KIND_3", "TYPE_2"};
  3. for(String path : remote_path){
  4. System.out.println("上傳檔案至"+path+"目錄下");
  5. checkDirExist(path);
  6. ftp.put(local_path, "123.doc");
  7. System.out.println("檔案上傳成功!!");
  8. backToRootDir();
  9. System.out.println("==========================");
  10. }

在這邊的目的為指定一個本地端的檔案,將上傳到FTP_TEST目錄下的兩個指定路徑

(remote_path),此時會去呼叫checkDirExist method做該路徑的目錄是否存在,若是不存在

的話會自動建立之。
  1. public static void checkDirExist(String path) throws IOException, FTPException{
  2. try {
  3. ftp.chdir(path);
  4. } catch (IOException e) {
  5. // TODO Auto-generated catch block
  6. e.printStackTrace();
  7. } catch (FTPException e) {
  8. // TODO Auto-generated catch block
  9. System.out.println(path+"不存在!!");
  10. ftp.mkdir(path);
  11. System.out.println("建立"+path);
  12. ftp.chdir(path);
  13. System.out.println("切換至"+path);
  14. }
  15. }

PS. 注意! mkdir會自動幫您建立好您不存在的目錄! 相當省事!

接著,呼叫put method,帶入本地端的檔案路徑及上傳FTP的檔案(rename)!

再來,將目前指定到的目錄重新返回到FTP_TEST目錄下,呼叫backToRootDir method

  1. public static void backToRootDir() throws IOException, FTPException, InterruptedException{
  2. FTPReply reply = null;
  3. while(true){
  4. reply=ftp.sendCommand("CDUP");
  5. System.out.println(reply.getReplyText());
  6. if(reply.getReplyText().contains("\"/"+FTP_DIR+"\"")){
  7. break;
  8. }
  9. }
  10. }

在這邊,由於可透過CDUP指令回到FTP_TEST目錄,但不知有幾層,因此透過無窮迴圈

的方式,如果回應內的當下路徑為"/FTP_TEST"時,就立即跳出迴圈!

最後執行的結果如下:


下圖所示,如果指定的上傳路徑不存在的話,則自動建立之

並且從CDUP指令回到FTP_TEST目錄




留言