Java Can';t使用Apache Commons FTPClient访问FTP服务器上的子文件夹

Java Can';t使用Apache Commons FTPClient访问FTP服务器上的子文件夹,java,ftp,apache-commons,ftp-client,apache-commons-net,Java,Ftp,Apache Commons,Ftp Client,Apache Commons Net,我想下载FTP服务器子文件夹中的文件,但我发现我的客户端无法访问子文件夹 我编写了简单的代码来列出子文件夹中的所有文件: public static void main(String[] args) throws IOException { FTPClient ftpClient = new FTPClient(); ftpClient.connect(HOST, PORT); ftpClient.login(USER, PASS); ftpClient.en

我想下载FTP服务器子文件夹中的文件,但我发现我的客户端无法访问子文件夹

我编写了简单的代码来列出子文件夹中的所有文件:

 public static void main(String[] args) throws IOException {
    FTPClient ftpClient = new FTPClient();

    ftpClient.connect(HOST, PORT);
    ftpClient.login(USER, PASS);
    ftpClient.enterLocalPassiveMode();
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

    FTPFile[] files = ftpClient.listFiles("/archive");
    int length = files.length;
    System.out.println("Number of files: " + length);

    ftpClient.logout();
    ftpClient.disconnect();
}
但是
文件
数组的长度为零


当我在主目录上运行此程序时,文件被正确列出。

您的代码正常。它应该可以在大多数服务器上工作。您的代码将向服务器发送以下命令:

LIST /archive
这是正确的(假设服务器使用此路径语法[斜杠]引用根文件夹的子文件夹)


但是一些(模糊的)服务器在传递给
LIST
命令的参数方面存在问题

请尝试以下代码:

ftpClient.cwd("archive");
FTPFile[] files = ftpClient.listFiles();
上述文件将发送:

CWD archive
LIST

另一种值得尝试的方法是删除前导斜杠,因为服务器可能使用不同的路径分隔符:

FTPFile[] files = ftpClient.listFiles("archive");