微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java Apache FTPClient大多数下载的文件为空或丢失

如何解决Java Apache FTPClient大多数下载的文件为空或丢失

这是我的代码,应该将整个FTP目录下载到本地文件夹。它做得很好,但是大多数文件的大小为0KB。只有JSON文件似乎包含所有数据。

我尝试过的事情:

  1. 使用client.setFileType("FTP.BINARY_FILE_TYPE");更改FTP文件类型
  2. 使用OutputStream代替FileOutputStream

代码

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

如何正确获取转帐?

尝试在同一台计算机上下载该文件时,几次连接中断-在文件下载之间和下载过程中。另外,似乎下载的文件很少。我将问题标题更改为更具体。

出于某些原因,仅复制两个文件https://pastebin.com/XNWqRMDj它们不为空。

解决方法

问题是您的changeWorkingDirectory通话。大多数时候都失败了。

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

应该是:

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

有关以Java下载FTP文件夹的完整工作代码,请参见:
Download all folders recursively from FTP server in Java

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。