我使用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 \“”。但仍然没有奏效。我错过了什么。
答案 0 :(得分:3)
我认为这可能是一个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);
}
}
答案 1 :(得分:1)
这是一个旧的,但我最近遇到了这个问题,并找到了一个似乎对我有用的解决方案。使用转义字符“\”来转义空格。
例如:
String path = "/Path/To/Folder With/Spaces";
path = path.replace(" ", "\\ ");
FTPFile[] listedDirectories = client.listDirectories(path);
答案 2 :(得分: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;
}