Я использую следующий код, чтобы убедиться, что содержимое файла успешно записаны на дискполучать сброс соединения по сверстников исключением (TopLink)
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();
if (source == null) {
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);
//add for successfull
} else {
log.debug("skipping creation of asset");
}
} catch (Exception e) {
if(count < 3){
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);
}
} else {
log.debug(e.getClass().getName());
e.printStackTrace();
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
Я звоню этот код, как этот
while(iter.hasNext()) {
CourseMaterials cm = iter.next();
String url;
try {
Asset asset = cm.getAsset();
List<AssetVersion> av = asset.getAssetVersions();
} catch (Exception e1) {
log.debug("Bad asset so skipping...");
e1.printStackTrace();
continue;
}
....
try {
URL earl = new URL(visualElementURL);
scormFileWriter.copyFileFromUrl(earl, new File(absoluteFileName), 0);
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
Теперь, как я пытаюсь, как, когда я пришел к функции copyFileFromUrl()
, я отсоединяю кабель, он пытается два раза, затем в третий раз подключаю кабель. Функция возвращается успешно. Как я в цикле while. Теперь после этого, когда я прихожу на линию
Asset asset = cm.getAsset();
Я получаю Connection Reset by peer exception
. Он пропускает этот актив, а затем снова начинает нормально. Зачем ? Почему я получаю connection Reset by peer exception
? Если я получаю это исключение из-за отсоединения кабеля, я также должен получить его для всех других активов, но я получаю это исключение только для следующей итерации, тогда он начинает работать нормально, я имею в виду, тогда строка Asset asset = cm.getAsset();
не вызывает исключения после метания первый раз?
Почему это происходит? Как я могу его преодолеть?
Я использую SQL Server 2008 для базы данных.
Благодаря