Получить все содержимое подпапок с помощью библиотеки Java Apache Commons Net - PullRequest
0 голосов
/ 11 марта 2019

Используя Java Apache Commons Net FTPClient, возможно ли сделать вызов listFiles, который будет извлекать содержимое каталога, а также все его подкаталоги?

1 Ответ

0 голосов
/ 11 марта 2019

Библиотека не может сделать это самостоятельно.Но вы можете реализовать это с помощью простой рекурсии:

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 рекурсивно водин звонок

...