如何解决Java Apache FTPClient大多数下载的文件为空或丢失
这是我的代码,应该将整个FTP目录下载到本地文件夹。它做得很好,但是大多数文件的大小为0KB。只有JSON文件似乎包含所有数据。
我尝试过的事情:
- 使用
client.setFileType("FTP.BINARY_FILE_TYPE");
更改FTP文件类型 - 使用
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 举报,一经查实,本站将立刻删除。