我正在使用 com.enterprisedt.net.ftp jar 将 FTP 文件传输到远程位置。我的代码看起来像
try{
ftp.mkdir(actDirToSearch);
}catch(Exception e){
Log.addInLog(Log.ERR,e.getMessage());
}
ftp.chdir(actDirToSearch);
try{
ftp.put(tarStream, fileName);
}
catch(Exception ex){
throw new FTPException(ex.getMessage());
}
}catch(FTPException e){
throw e;
}catch(IOException e){
throw e;
}finally{
try {
if(ftp != null){
ftp.quit();
}
}
另外,我正在使用此代码将 tar.gz 文件上传到具有 RHEL 5.4 和 6 的 2 台不同的远程计算机。但有时我收到成功的消息,有时 tar.gz 文件在远程计算机上以较小的大小上传后会损坏。在调试时,我发现如果我在 if(ftp != null) 行停止,然后在一段时间后执行 ftp.quit() ,它总是会成功。我已经看穿了 ftp 代码,我发现没有单独的线程来 ftp tar.gz 文件。它都是串行执行的。我的疑问是为什么这个 tar.gz 文件会损坏,为什么我在调试时会成功?
vsftpd 服务在两台机器上都运行。同样,在从终端手动执行 ftp 时,它也成功了。Java 版本是 1.6 。