【发布时间】:2014-08-13 16:45:58
【问题描述】:
我正在使用 Apache 的库编写一个非常简单的 FTPClient 应用程序。
我所做的只是从服务器下载一个 jar 文件。也不例外,当我在 MacOS 上运行时,应用程序运行良好,一旦我在 Windows 中运行相同的代码,下载的文件就会比服务器上的文件小。但是,也不例外,一切似乎都很好。
我快疯了,我用的是二进制模式,代码简单到我不敢相信我从昨天开始就卡在上面了!!!
请帮忙!
public boolean loadLatest(){
FTPClient ftp = new FTPClient();
try {
ftp.connect("server address");
ftp.setControlKeepAliveTimeout(300);
ftp.enterLocalPassiveMode();
String fu = "username";
ftp.login(fu, "password");
int reply = ftp.getReplyCode();
if (FTPReply.isPositiveCompletion(reply)) {
ftp.setFileTransferMode(FTP.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
FTPFilter filter = new FTPFilter();
FTPFile[] finfo = ftp.listFiles(".",filter);
if (finfo.length==0){
return false;
}
File currentJar = new File("sm.jar");
FileOutputStream output;
output = new FileOutputStream("sm.jar");
if (ftp.retrieveFile(finfo[0].getName(), output)==false){
System.out.println("Bad file!");
}
output.close();
ftp.logout();
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
这是我的代码:
谢谢
【问题讨论】:
-
您自己采取了哪些具体步骤来解决这个问题?
-
你说下载的文件更小,到底有多小?文件的内容是什么?是空文件吗?
-
我已经在 MacOS 和 Windows 上进行了测试,结果始终相同。我在服务器上的原始文件是 2,612,350 字节,在 MacOS 上下载的文件大小完全相同,但在 Windows 上下载的文件是 2,622,171 字节。而且这是一个jar文件,所以windows上下载的文件已经损坏,无法使用。
-
此外,最初我正在替换 jar 文件本身(获取新版本),即使它在 Mac 上运行,我想这可能是由于在 VM 中运行的同一个文件上写入!所以我添加了一个小助手 jar,它会检查实际的 jar 并下载是否有新文件,然后启动一个进程,然后我注意到无论下载的文件是否正确。
标签: java ftp-client apache-commons-net