Java Apache FTPClient en çok indirilen dosyalar boş veya eksik
Bu, tüm FTP dizinini yerel bir klasöre indirmesi gereken kodumdur. İyi yapar, ancak dosyaların çoğu 0KB boyutundadır. Görünüşe göre yalnızca JSON dosyaları tüm verilerini içeriyor.
Denediğim şeyler:
- FTP dosya türünü değiştirmek
client.setFileType("FTP.BINARY_FILE_TYPE"); - Kullanma
OutputStreamyerineFileOutputStream
Kod:
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;
}
}
Transfer nasıl doğru yapılır?
ftp'den günlük
ftp dizininin ağacı
dizin indirme ağacı
Aynı bilgisayarda indirmeye çalışmak, birkaç kez - dosya indirme işlemleri arasında ve sırasında - bağlantının kesilmesiyle sonuçlandı. Ayrıca birkaç dosyanın indirildiği görülüyor. Sorunun başlığını daha spesifik olacak şekilde değiştireceğim.
Herhangi bir nedenle yalnızca iki dosya kopyalanmaktadır - https://pastebin.com/XNWqRMDj Boş değiller.
Yanıtlar
Sorun senin changeWorkingDirectoryçağrın. Çoğu zaman başarısız oluyor.
ftpClient.changeWorkingDirectory(ftpClient.printWorkingDirectory() + "/" + sourceFile.getName());
Olmalı:
ftpClient.changeWorkingDirectory(destination + "/" + sourceFile.getName());
Java'da FTP klasörlerini indirmek için eksiksiz bir çalışma kodu için bkz .:
Tüm klasörleri Java'da FTP sunucusundan yinelemeli olarak indirin