URLからのコンテンツがファイルに正常に書き込まれるように努めています。このために、私は次のコードを使用しています
public void copyFileFromUrl(URL source, File target, int count) throws IOException {
InputStream in = null;
OutputStream out = null;
if (target != null) {
try {
if (!target.exists()) {
target.createNewFile();
log.debug("target file created for " + target);
log.debug("downloading source .... " + source);
if (source == null) {
log.debug("Null source .... " + ScormFileWriter.class.getName());
return;
} else {
in = source.openStream();
}
out = new FileOutputStream(target);
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
log.debug("The contents from the URL: " + source + " are successfully written to the file " + target);
} else {
log.debug("skipping creation of asset");
}
} catch (Exception e) {
if(count < 3){
log.debug("trouble with " + target);
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
// Attempt to delete it
boolean success = target.delete();
if (!success) {
log.debug("Unable to delete " + target);
} else {
copyFileFromUrl(source, target, ++count);
}
}
log.debug("trouble in downloading source after trying " + count + " times: " + source);
e.printStackTrace();
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
関数が最初に呼び出されたときに何が起こっているのか
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
ケーブルを抜くと、例外がスローされ、コードがブロックをキャッチして関数を再度呼び出すようになります。今度はケーブルを接続します。今度はwhile
ループが完了し、ラインが
log.debug("The contents from the URL: " + source + " are successfully written to the file " + target);
印刷され、コードが最終的にブロックされ、コードがこれらの2行に表示されます
log.debug("trouble in downloading source after trying " + count + " times: " + source);
e.printStackTrace();
なんで?今回は例外はスローされず、すべて正常に動作します。コードがブロックをキャッチするのはなぜですか? 今回は最終的にコードが正常に戻るはずですか?
ありがとう