Java Apache FTPClient Die meisten heruntergeladenen Dateien sind leer oder fehlen

Oct 26 2020

Dies ist mein Code, der das gesamte FTP-Verzeichnis in einen lokalen Ordner herunterladen soll. Es macht es gut, aber die meisten Dateien sind 0 KB groß. Nur JSON-Dateien scheinen alle ihre Daten zu enthalten.

Dinge, die ich versucht habe:

  1. Ändern des FTP-Dateityps mit client.setFileType("FTP.BINARY_FILE_TYPE");
  2. Verwenden OutputStreamstattFileOutputStream

Code:

public static void copyFolder(File destination, FTPFile sourceFile, FTPClient ftpClient) throws IOException{
    if (!sourceFile.isDirectory()) {
        //copy file
        File downloadFile = new File(destination + "/"+ sourceFile.getName());
        String remoteFile =  sourceFile.getName();
        FileOutputStream outputStream = new FileOutputStream(downloadFile);
        System.out.println(remoteFile);
        System.out.println(downloadFile.getPath());
        boolean success = ftpClient.retrieveFile(remoteFile, outputStream);
        if(success) {
            System.out.println("Retrieved " + remoteFile);
        }
        outputStream.close();
    }else{
        //loop through a subdirectory
        ftpClient.changeWorkingDirectory(ftpClient.printWorkingDirectory() + "/" + sourceFile.getName());
        System.out.println(ftpClient.printWorkingDirectory());
        FTPFile[] contents = ftpClient.listFiles(ftpClient.printWorkingDirectory());
        File newDest = new File(destination + "/" + sourceFile.getName());
        if(!newDest.exists()){
            newDest.mkdir();
        }
        for(FTPFile file : contents){
            copyFolder(newDest, file, ftpClient);
        }
        return;
    }
}

Wie bekomme ich die Überweisung richtig?

  • log von ftp

  • Baum des FTP-Verzeichnisses

  • Baum des Download-Verzeichnisses

Der Versuch, es auf denselben Computer herunterzuladen, endete mit einem mehrmaligen Verbindungsverlust - zwischen und während des Herunterladens von Dateien. Es scheint auch, dass nur wenige Dateien heruntergeladen werden. Ich werde den Titel der Frage genauer ändern.

Aus irgendeinem Grund werden nur zwei Dateien kopiert - https://pastebin.com/XNWqRMDj Sie sind nicht leer.

Antworten

MartinPrikryl Oct 26 2020 at 17:42

Das Problem ist Ihr changeWorkingDirectoryAnruf. Es scheitert die meiste Zeit.

ftpClient.changeWorkingDirectory(ftpClient.printWorkingDirectory() + "/" + sourceFile.getName());

Es sollte sein:

ftpClient.changeWorkingDirectory(destination + "/" + sourceFile.getName());

Einen vollständigen Arbeitscode zum Herunterladen von FTP-Ordnern in Java finden Sie unter:
Laden Sie alle Ordner rekursiv vom FTP-Server in Java herunter