Java - FTP複製檔案至指定目錄

在這邊要說明的是,如何在FTP目錄內將檔案複製至其它目錄(非local),以達到檔案間的複

製操作!

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

一般來說我們通常會針對FTP做基本的上傳及下載檔案的操作,而如果您要在FTP上直接將

檔案做copy至其它線上的目錄的話,在此將利用該套件API的get method,只不過需使用的

是回傳byte array,而並非指定localFile的。

 byte[]get(java.lang.String remoteFile)
          Get data from the FTP server.
 voidget(java.lang.String localPath, java.lang.String remoteFile)
          Get data from the FTP server.
節錄至API文件

當您取得了檔案的位元組資料後,此時您要將資料寫入至指定的目錄,此時可以查閱put

method,但我們這邊的來源已經不是localFile,而是剛剛的byte array。

java.lang.Stringput(byte[] bytes, java.lang.String remoteFile)
          Put data onto the FTP server.
 java.lang.Stringput(java.lang.String localPath, java.lang.String remoteFile)
          Put a local file onto the FTP server.
節錄至API文件
PS. 若檔案存在將會複寫過去!!

簡單的範例如下:
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";
 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  
    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("連線成功....");
   
       ftp.chdir("TYPE_2//KIND_3");
   
       byte[] fileTmp = ftp.get("123.doc");
   
       FTPReply reply=ftp.sendCommand("CDUP");
   
       System.out.println(reply.getReplyText());
   
       ftp.put(fileTmp, "1235.doc");
   
    } 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();
       }
    } 
 }

執行結果如下:

留言