在這邊簡單的提到,如果我們要將檔案上傳到FTP上面,假如FTP端的相關目錄不存在的話,
該怎麼處理的簡單議題,並且提到如何回上一層目錄等指令!
在這邊使用的套件為:FTPClient - EnterpriseDT
該怎麼處理的簡單議題,並且提到如何回上一層目錄等指令!
在這邊使用的套件為:FTPClient - EnterpriseDT
首先先自行架設FTP Server,設定好一帳號可連線到一HOME目錄!
上面的程式主要是說明如何登入到您指定的FTP Server並且切換到您要進入的目錄!
二、上傳檔案部分
在這邊的目的為指定一個本地端的檔案,將上傳到FTP_TEST目錄下的兩個指定路徑
(remote_path),此時會去呼叫checkDirExist method做該路徑的目錄是否存在,若是不存在
的話會自動建立之。
PS. 注意! mkdir會自動幫您建立好您不存在的目錄! 相當省事!
接著,呼叫put method,帶入本地端的檔案路徑及上傳FTP的檔案(rename)!
再來,將目前指定到的目錄重新返回到FTP_TEST目錄下,呼叫backToRootDir method
在這邊,由於可透過CDUP指令回到FTP_TEST目錄,但不知有幾層,因此透過無窮迴圈
的方式,如果回應內的當下路徑為"/FTP_TEST"時,就立即跳出迴圈!
最後執行的結果如下:
一、連線登入的操作
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目錄
留言
張貼留言