0

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

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

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

4

2 回答 2

2
  1. 用户可能没有创建目录的权限(至少在这个特定的地方)。
  2. “文件夹名称”描述的目录是否存在?如果不是,那么您将在一次调用中创建整个目录层次结构(即/{folderName}/Archive)时遇到一些困难。确保“文件夹名称”存在或在单独的步骤中创建它。

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是允许或拒绝访问的代码,这个代码和其他代码很容易用谷歌搜索。
我希望这能帮到您。

于 2013-03-15T17:37:10.040 回答
0

您应该逐步创建目录。否则,您将获得创建目录错误。有一个示例供您使用。http://www.codejava.net/java-se/networking/ftp/creating-nested-directory-structure-on-a-ftp-server

于 2015-07-20T08:02:25.777 回答