web-dev-qa-db-ja.com

Apache Commons FTPClient.listFiles

FTPサーバーを使用するアプリケーションの1つで _org.Apache.commons.net.ftp.FTPClient_ を使用しています。 connectloginpwdcwdができます。ただし、ファイルをlistしようとすると、そのディレクトリ内のファイルのリストが返されません。ファイルがあることは確かです。 FTPFile[] listFiles() メソッドを使用していますが、FTPFileの空の配列が返されます。

私がこれを試しているコードスニペットの下を見つけてください:

_        String hostname = properties.getProperty("FTP_SERVER");
        String user = properties.getProperty("FTP_USER");
        String passwd = properties.getProperty("FTP_PASSWD");
        FTPClient client = new FTPClient();
        client.connect(hostname);
        client.login(user, passwd);
        String reply = client.getStatus();
        System.out.println(reply);
        client.enterRemotePassiveMode();
        client.changeWorkingDirectory("/uploads");
        FTPFile[] files = client.listFiles();
        System.out.println(files.length);
        for (FTPFile file : files) {
            System.out.println(file.getName());
        }

        String[] fileNames = client.listNames();
        if (fileNames != null) {
            for (String file : fileNames) {
                System.out.println(file);
            }
        }
        client.disconnect();
_
20
Shyam

これは私が持っていた(そして解決した)同じ問題のようです、この答えを見てください:

Apache Commons Net FTPClientおよびlistFiles()

18
PapaFreud

モードをPASVに設定した後、正常に動作しています。あなたのすべての努力と提案に感謝します!

6
Shyam

私はclient.enterLocalPassiveMode()を追加しました:

client.connect("xxx.com");
boolean login = client.login("xxx", "xxx");
client.enterLocalPassiveMode();
1

ばかげた提案です...通常のFTPクライアントを使用して/ uploadsフォルダーのリストを作成できますか?一部のFTPサーバーがアップロードフォルダのリストを表示しないように設定されているため、これを要求します。

1
Paul

まず、リストが他のプログラムで機能することを確認します。その場合、1つの可能性は、ファイルリストが正しく解析されていないことです。 initiateListParsing で使用するパーサーを明示的に指定してみてください。

1

私は同じ問題を抱えている必要がありましたが、サーバーがファイルリストのために返していたものを解析できなかったことがわかりました。 ftpサーバーに接続した後のこの行ftpClient.setParserFactory(new MyFTPFileEntryParserFactory());

public class MyFTPFileEntryParserFactory implements FTPFileEntryParserFactory {
private final static FTPFileEntryParser parser = new UnixFTPEntryParser() {
    @Override public FTPFile parseFTPEntry(String entry) {
        FTPFile ftpFile = new FTPFile();
        ftpFile.setTimestamp(getCalendar(entry));
        ftpFile.setSize(get(entry));
        ftpFile.setName(getName(entry));
        return ftpFile;
    }
};

@Override public FTPFileEntryParser createFileEntryParser(FTPClientConfig config) throws ParserInitializationException {
    return parser;
}

@Override public FTPFileEntryParser createFileEntryParser(String key) throws ParserInitializationException {
    return parser;
}

}

1
Lisa