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

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

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

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

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


一、連線登入的操作

private static FTPClient ftp;
static String FTP_SERVER="127.0.0.1";
static String FTP_ID="test";
static String FTP_PW="test";
static String FTP_DIR = "FTPTest";

public static void main(String[] args) {
ftp=new FTPClient();
System.out.println("正在連線到...." + FTP_SERVER);
try {
 ftp.setRemoteHost(FTP_SERVER);
 ftp.connect();
 ftp.login(FTP_ID,FTP_PW);
 ftp.setConnectMode(FTPConnectMode.PASV);
 ftp.setType(FTPTransferType.BINARY); 
 System.out.println("切換目錄到:"+FTP_DIR);
 ftp.chdir(FTP_DIR);
 
 System.out.println("連線成功....");
        
    //上傳檔案部分(請見下一段程式碼) 
} catch (Exception e) {
 // TODO Auto-generated catch block
 e.printStackTrace();
} finally{
 try {
  ftp.quit();
  System.out.println("關閉FTP連線!!");
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (FTPException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
} 

}

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

二、上傳檔案部分

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

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

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

的話會自動建立之。
public static void checkDirExist(String path) throws IOException, FTPException{
 try {
  ftp.chdir(path);
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (FTPException e) {
  // TODO Auto-generated catch block
  System.out.println(path+"不存在!!");
  ftp.mkdir(path);
  System.out.println("建立"+path);
  ftp.chdir(path);
  System.out.println("切換至"+path);
 }
}

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

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

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

public static void backToRootDir() throws IOException, FTPException, InterruptedException{
 FTPReply reply = null;
 while(true){
  reply=ftp.sendCommand("CDUP");
  System.out.println(reply.getReplyText());
  if(reply.getReplyText().contains("\"/"+FTP_DIR+"\"")){
   break;
  }
 }
}

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

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

最後執行的結果如下:


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

並且從CDUP指令回到FTP_TEST目錄




留言