org.apache.commons.net.ftp.FtpClientを使用して、複数のファイルを並行してダウンロードし、失敗時に再試行する信頼できる FTP クラスを作成しました。
奇妙なことに、コードに障害を認識させることができないようです。たとえば、転送の途中でイーサネット ケーブルを引っ張ると、コードは次の場所でブロックし続けているように見えます。
client.retrieveFile(nextFile, ftpOutputStream);
ライン。false を返すか、例外をスローするのではなく、この行でブロックする理由を誰か教えてもらえますか? タイムアウトなどの設定を忘れましたか?
try {
OutputStream ftpOutputStream = new FileOutputStream(fileName);
System.out.println("Attempting to retrieve file [" + nextFile + "].");
success = iclient.retrieveFile(nextFile, ftpOutputStream);
System.out.println("Returned from retrieving file [" + nextFile + "].");
ftpOutputStream.close();
}
//Can fail due to FTPConnectionClosedException, CopyStreamException, or IOException. In any case, best course
//of action is to simply create a new connection, log in again, and change back to target directory.
catch(Exception ex) {
try {
System.out.println("Error occurred during download, deleting file and restarting.");
Thread.sleep(1000);
//Delete the failed file assuming any of it got written to the local drive.
File f = new File(fileName);
if(f.exists()) {
System.out.println("Deleting file...");
f.delete();
}
Thread.sleep(5000);
}
catch (InterruptedException iex) {
System.out.println("Interrupted exceptoin while respoding to failed FTP attempt.");
}
}