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 つの異なるリモート マシンにアップロードしています。デバッグ中に、 if(ftp != null) 行で停止し、しばらくしてから ftp.quit() を実行すると、常に成功するという動作が見つかりました。ftp コードを確認しましたが、tar.gz ファイルを ftp する別のスレッドが見つかりませんでした。そのすべてがシリアルに実行されます。私の疑問は、この tar.gz ファイルが破損している理由と、デバッグ中に成功した理由です。
vsftpd サービスは両方のマシンで実行されています。また、ターミナルから手動で ftp を実行しているときに、成功しました。Java のバージョンは 1.6 です。