6

我正在使用 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

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

4

3 回答 3

3

这是一个旧问题,但我最近遇到了这个问题并找到了一个似乎对我有用的解决方案。使用转义字符“\”转义您的空格。

例如:

String path = "/Path/To/Folder With/Spaces";
path = path.replace(" ", "\\ ");
FTPFile[] listedDirectories = client.listDirectories(path);
于 2015-07-19T18:46:14.200 回答
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

如果您不想在每次有一个名称中包含空格的目录时都写这个,您可以创建一个为您执行此操作的方法:

FTPFile[] listDirectories(String directory){
    if(directory.contains(" ")){
        client.cwd(directory);
        FTPFile[] listedDirectories = client.listDirectories();
        client.cdup();
        return listedDirectories;
    } else {
        return client.listDirectories(directory);
    }
}
于 2013-01-12T10:28:30.953 回答
0

显然,当 listFiles(String path) 包含空格的路径存在问题时,其他函数没有类似问题。您需要做的只是更改工作目录,然后使用 listFiles()。

像这样的东西:

private FTPFile[] getDirectoryFiles(String dirPath) throws IOException
{
    String cwd = ftp.printWorkingDirectory();

    ftp.changeWorkingDirectory(dirPath);
    FTPFile[] files = ftp.listFiles();
    ftp.changeWorkingDirectory(cwd);

    return files;               
}
于 2016-04-05T11:51:43.963 回答