Java Apache FTPClient Die meisten heruntergeladenen Dateien sind leer oder fehlen
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:
- Ändern des FTP-Dateityps mit
client.setFileType("FTP.BINARY_FILE_TYPE"); - 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
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