Рекурсивный список файлов и каталогов на FTP-сервере с использованием Java - PullRequest
1 голос
/ 07 июня 2011

В настоящее время я использую библиотеку Java FTP (ftp4j) для доступа к FTP-серверу.Я хочу указать количество файлов и количество каталогов для сервера, но это означает, что мне нужно будет перечислять файлы в каталогах в каталогах в каталогах и т. Д.

Как это достижимо?Будем благодарны за любые подсказки.

Извлечение из кода:

client = new FTPClient();
try {
    client.connect("");
    client.login("", "");
    client.changeDirectory("/");
    FTPFile[] list = client.list();
    int totalDIRS = 0;
    int totalFILES = 0;
    for (FTPFile ftpFile : list) {
        if (ftpFile.getType() == FTPFile.TYPE_DIRECTORY) {
            totalDIRS++;
        }
    }
    message =
        "There are currently " + totalDIRS + " directories within the ROOT directory";
    client.disconnect(true);
} catch (Exception e) {
    System.out.println(e.toString());
}

Ответы [ 3 ]

0 голосов
/ 07 июня 2011

Создайте рекурсивную функцию, которая при наличии файла, который может быть каталогом, возвращает количество файлов и каталогов в нем. Используйте isDir и listFiles.

0 голосов
/ 08 июня 2018

Просто используйте рекурсивную функцию, как показано ниже.

Обратите внимание, что мой код использует Apache Commons Net , а не ftp4j, о чем идет речь.Но API почти такой же, и в любом случае ftp4j кажется заброшенным проектом.

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("Foud remote file " + remoteFilePath);
            }
        }
    }
}
0 голосов
/ 07 июня 2011

Попробуйте использовать рекурсивные функции.Это может быть функция, которая проверяет каталог на наличие файлов, а затем вы можете проверить, есть ли у файла дочерний элемент, это будет каталог.Если у него есть дочерний элемент, вы можете снова вызвать ту же самую функцию для этого каталога и т. Д.

Например, псевдо-Java здесь:

void Function(String directory){
 ... run through files here
 if (file.hasChild())
 {
  Function(file.getString());
 }
}

Я уверен, что вы можете использовать этот тип кодированияв подсчете файлов ...

...