FTP客户端子目录创建

问题描述:

我正在使用FTPClient在FTP服务器中创建子目录。我想在“Root”下创建一个目录“Archive”。我使用下面的函数来创建子目录。FTP客户端子目录创建

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

但它返回false并且不能创建子目录“存档”。如何解决这个问题?

  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是代码权限或访问被拒绝,这个和其他代码很容易谷歌。
我希望这会帮助你。

您应该逐步创建目录。另外,您将获得创建目录false.There就是一个例子。 http://www.codejava.net/java-se/networking/ftp/creating-nested-directory-structure-on-a-ftp-server