Java Apache FTPClient en çok indirilen dosyalar boş veya eksik

Oct 26 2020

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:

  1. FTP dosya türünü değiştirmek client.setFileType("FTP.BINARY_FILE_TYPE");
  2. 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

MartinPrikryl Oct 26 2020 at 17:42

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