FTPClient无法从带有空格的目录名称获取文件列表

Bar*_*run 5 java ftp apache-commons-net

我正在使用Apache FTPClient获取文件和子目录文件列表。但是它无法从目录名称中获取带有空格的文件列表。这是一个示例-我尝试了两个不同的目录:

    FTPClient client = new org.apache.commons.net.ftp.FTPClient();
    client.connect("ftp.domain.com");
    client.login("userid", "password");

    FTPFile[] names = client.listDirectories("ABC XYZ"); //Empty array
    FTPFile[] names2 = client.listDirectories("ABCXYZ"); //working
Run Code Online (Sandbox Code Playgroud)

因此带有空格的目录名称不返回任何内容。我试图将“%20”和“ +”放在空格处。我也尝试过“ \” ABC XYZ \”。但是仍然无法正常工作。我错过了什么吗?

Bac*_*ash 2

我认为这可能是 Apache Commons 问题,它对我不起作用,事实上它可能不起作用,因为空格被解释为命令参数的分隔符。我无法找到解决您问题的方法,我所能做的就是建议您一个解决方法:

FTPClient client = new org.apache.commons.net.ftp.FTPClient();
client.connect("ftp.domain.com");
client.login("userid", "password");

client.cwd("ABC XYZ");
FTPFile[] names = client.listDirectories(); //now this should work, it works for me
client.cdup();
FTPFile[] names2 = client.listDirectories("ABCXYZ"); //working
Run Code Online (Sandbox Code Playgroud)

如果您不想每次都有一个名称中包含空格的目录时都编写此内容,您可以创建一个方法来为您完成此操作:

FTPFile[] listDirectories(String directory){
    if(directory.contains(" ")){
        client.cwd(directory);
        FTPFile[] listedDirectories = client.listDirectories();
        client.cdup();
        return listedDirectories;
    } else {
        return client.listDirectories(directory);
    }
}
Run Code Online (Sandbox Code Playgroud)