20

org.apache.commons.net.ftp.FTPClientアプリケーションの 1 つで FTP サーバーを操作するために使用しています。connectloginpwdおよびができcwdます。ただし、ファイルにアクセスしようとすると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();
4

7 に答える 7

20

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

Apache Commons Net FTPClientおよびlistFiles()

于 2011-03-03T16:12:57.927 に答える
6

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

于 2010-02-26T07:49:20.297 に答える
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;
}

}

于 2014-10-06T19:15:42.093 に答える
1

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

于 2010-02-26T06:32:25.470 に答える
1

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

于 2010-02-26T06:36:12.373 に答える