Загрузить весь каталог FTP на Java (Apache Net Commons)

Я пытаюсь рекурсивно выполнить итерацию по всему корневому каталогу, который я получаю после входа на FTP-сервер.

Я могу подключиться, все, что я действительно хочу сделать, - это рекурсировать всю структуру, загружать каждый файл и папку и иметь ту же структуру, что и на FTP. Пока у меня есть работающий метод загрузки, он идет на сервер и получает всю мою структуру файлов, что замечательно, за исключением того, что он терпит неудачу с первой попытки, а затем работает во второй раз. Я получаю следующую ошибку:

java.io.FileNotFoundException: output-directory \ test \ testFile.png (система не может найти указанный путь)

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

public static void download(String filename, String base)
{
    File basedir = new File(base);
    basedir.mkdirs();

    try
    {
        FTPFile[] ftpFiles = ftpClient.listFiles();
        for (FTPFile file : ftpFiles)
        {
            if (!file.getName().equals(".") && !file.getName().equals("..")) {
                // If Dealing with a directory, change to it and call the function again
                if (file.isDirectory())
                {
                    // Change working Directory to this directory.
                    ftpClient.changeWorkingDirectory(file.getName());
                    // Recursive call to this method.
                    download(ftpClient.printWorkingDirectory(), base);

                    // Create the directory locally - in the right place
                    File newDir = new File (base + "/" + ftpClient.printWorkingDirectory());
                    newDir.mkdirs();

                    // Come back out to the parent level.
                    ftpClient.changeToParentDirectory();
                }
                else
                {
                    ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
                    String remoteFile1 = ftpClient.printWorkingDirectory() + "/" + file.getName();
                    File downloadFile1 = new File(base + "/" + ftpClient.printWorkingDirectory() + "/" + file.getName());
                    OutputStream outputStream1 = new BufferedOutputStream(new FileOutputStream(downloadFile1));
                    boolean success = ftpClient.retrieveFile(remoteFile1, outputStream1);
                    outputStream1.close();
                }
            }
        }
    }
    catch(IOException ex)
    {
        System.out.println(ex);
    }
}

Ответы на вопрос(2)

Ваш ответ на вопрос