Download des gesamten FTP-Verzeichnisses in Java (Apache Net Commons)

Ich versuche, das gesamte Stammverzeichnis, das ich nach der Anmeldung am FTP-Server erhalte, rekursiv zu durchlaufen.

Ich bin in der Lage, eine Verbindung herzustellen. Alles, was ich von dort aus wirklich tun möchte, ist, die gesamte Struktur durchzuarbeiten und jede Datei und jeden Ordner herunterzuladen und in derselben Struktur wie auf dem FTP zu haben. Was ich bis jetzt habe, ist eine funktionierende Download-Methode, die zum Server geht und meine gesamte Dateistruktur abruft, die brillant ist, außer dass sie beim ersten Versuch fehlschlägt und dann beim zweiten Mal funktioniert. Die Fehlermeldung lautet wie folgt:

java.io.FileNotFoundException: Ausgabeverzeichnis \ test \ testFile.png (Das System kann den angegebenen Pfad nicht finden.)

Ich habe es geschafft, die Upload-Funktionalität eines Verzeichnisses, das ich lokal besitze, hochzuladen, kann das Herunterladen jedoch nicht zum Laufen bringen, da ich nach zahlreichen Versuchen dringend Hilfe benötige.

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);
    }
}

Antworten auf die Frage(4)

Ihre Antwort auf die Frage