我试图从服务器下载一个文件,但它得到0字节......FTPClient下载一个0字节的文件
这是我FTPDownload类
public boolean getFile(String filename){
try {
FTPClient ftpClient = new FTPClient();
ftpClient.connect(ftpAddress, ftpPort);
ftpClient.login(ftpUser, ftpPass);
int reply = ftpClient.getReplyCode();
//FTPReply stores a set of constants for FTP reply codes.
if (!FTPReply.isPositiveCompletion(reply))
{
ftpClient.disconnect();
return false;
}
ftpClient.enterLocalPassiveMode();
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.setBufferSize(1024*1024);
String remoteFile = serverPath + filename;
logger.debug("remote file is: "+remoteFile); //correct path
File tempFile = new File(downloadDir+"temp.jar");
logger.debug("file will be "+tempFile.toString()); //correctly created
OutputStream os = new BufferedOutputStream(new FileOutputStream(tempFile));
ftpClient.retrieveFile(remoteFile, os);
os.close();
String completeJarName = downloadDir+jarName;
//delete previous file
File oldFile = new File(completeJarName);
FileUtils.forceDelete(oldFile);
//rename
File newFile = new File(completeJarName);
FileUtils.moveFile(tempFile, newFile);
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException e) {
// TODO Auto-generated catch block
logger.error("errore ftp", e);
return false;
}
return true;
}
基本上,临时呸得到创建,然后前面的文件被取消,临时文件被重命名,但它是0字节...我不明白哪里出了问题...
我不确定,但尝试在'ftpClient.retrieveFile'之后但在'os.close()'之前刷新输出流'os.flush()'。 – Shadov