6

ファイルとサブディレクトリ ファイルのリストを取得するために Apache FTPClient を使用しています。ただし、スペースを含むディレクトリ名からファイルのリストを取得できません。ここに例があります - 私は2つの異なるディレクトリで試しました:

    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 に答える