Библиотека не может сделать это самостоятельно.Но вы можете реализовать это с помощью простой рекурсии:
private static void listFolder(FTPClient ftpClient, String remotePath) throws IOException
{
System.out.println("Listing folder " + remotePath);
FTPFile[] remoteFiles = ftpClient.listFiles(remotePath);
for (FTPFile remoteFile : remoteFiles)
{
if (!remoteFile.getName().equals(".") && !remoteFile.getName().equals(".."))
{
String remoteFilePath = remotePath + "/" + remoteFile.getName();
if (remoteFile.isDirectory())
{
listFolder(ftpClient, remoteFilePath);
}
else
{
System.out.println("Found file " + remoteFilePath);
}
}
}
}
Мало того, что библиотека Apache Commons Net не может сделать это за один вызов.На самом деле в FTP нет API для этого.Хотя некоторые FTP-серверы имеют собственные нестандартные способы.Например, ProFTPD имеет -R
переключатель для команды LIST
(и его компаньонов).
FTPFile[] remoteFiles = ftpClient.listFiles("-R " + remotePath);
См. Также связанный вопрос C #:
Получение всех списков каталогов / файлов FTP рекурсивно водин звонок