FTPサーバーを使用するアプリケーションの1つで _org.Apache.commons.net.ftp.FTPClient
_ を使用しています。 connect
、login
、pwd
、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();
_
これは私が持っていた(そして解決した)同じ問題のようです、この答えを見てください:
モードをPASV
に設定した後、正常に動作しています。あなたのすべての努力と提案に感謝します!
私はclient.enterLocalPassiveMode()
を追加しました:
client.connect("xxx.com");
boolean login = client.login("xxx", "xxx");
client.enterLocalPassiveMode();
ばかげた提案です...通常のFTPクライアントを使用して/ uploadsフォルダーのリストを作成できますか?一部のFTPサーバーがアップロードフォルダのリストを表示しないように設定されているため、これを要求します。
まず、リストが他のプログラムで機能することを確認します。その場合、1つの可能性は、ファイルリストが正しく解析されていないことです。 initiateListParsing で使用するパーサーを明示的に指定してみてください。
私は同じ問題を抱えている必要がありましたが、サーバーがファイルリストのために返していたものを解析できなかったことがわかりました。 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;
}
}