2013-03-15 103 views
0

我正在使用FTPClient在FTP服務器中創建子目錄。我想在「Root」下創建一個目錄「Archive」。我使用下面的函數來創建子目錄。FTP客戶端子目錄創建

boolean s = ftNew.makeDirectory("/"+folderName+"/Archive"); 

但它返回false並且不能創建子目錄「存檔」。如何解決這個問題?

回答

2
  1. 用戶可能沒有權限創建目錄(至少在此特定位置)。
  2. 由「folderName」描述的目錄是否存在?如果沒有,那麼在單次調用中創建整個目錄層次結構(即/ {folderName}/Archive)會有一些困難。確保「folderName」存在或在單獨的步驟中創建它。

FTPClient的makeDirectory返回true或false,它不是非常有用的和比較模糊的結果。幸運的是,您可以改進您的代碼以報告精確的FTP狀態消息。

這裏有您需要什麼:

private static void showServerReply(FTPClient ftpClient) { 
    String[] replies = ftpClient.getReplyStrings(); 
    if (replies != null && replies.length > 0) { 
     for (String aReply : replies) { 
      System.out.println("SERVER: " + aReply); 
     } 
    } 
} 

調用此每FTPClient方法之後,例如:

package apachenet.ftp; 

import java.io.IOException; 
import org.apache.commons.net.ftp.FTPClient; 

public class App { 
    public static void main(String[] args) { 
     FTPClient client = new FTPClient(); 
     FileInputStream fis = null; 
     try { 
      client.connect("127.0.0.1"); 
      showServerReply(client); 
      client.login("pwyrwinski", "secret"); 
      showServerReply(client); 
      System.out.println("Current working directory is: " + client.printWorkingDirectory()); 
      String someDirectory = "nonexistentDir"; 
      client.makeDirectory("/" + someDirectory + "/Archive"); 
      showServerReply(client); 

      client.logout(); 
      showServerReply(client); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if (fis != null) { 
        fis.close(); 
       } 
       client.disconnect(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    private static void showServerReply(FTPClient ftpClient) { 
     // ... 
    } 
} 

結果我的機器上:

SERVER: 220 (vsFTPd 2.3.5) 
SERVER: 230 Login successful. 
Current working directory is: "/home/pwyrwinski" 
SERVER: 550 Create directory operation failed. 
SERVER: 221 Goodbye. 

當我改變String someDirectory到「home/pwyrwinski」:

SERVER: 220 (vsFTPd 2.3.5) 
SERVER: 230 Login successful. 
Current working directory is: "/home/pwyrwinski" 
SERVER: 257 "/home/pwyrwinski/Archive" created 
SERVER: 221 Goodbye. 

550是代碼權限或訪問被拒絕,這個和其他代碼很容易谷歌。
我希望這會幫助你。