public void save(Object key, T objToSave) throws FileNotFoundException, IOException {
IOException ex = null;
for (int i = 0; i < NUM_OF_RETRIES; i++) {
try {
/* saving */
String filePath = getFilePath(key);
OutputStream outStream = getOutStream(filePath);
ObjectOutputStream os = new ObjectOutputStream(outStream);
os.writeObject(objToSave);
os.close();
/* validations warnings etc. */
if (i>0){
logger.warn(objToSave + " saved on attamped " + i);
/* sleep more on each fail */
Thread.sleep(100+i*8);
}
//Thread.sleep(50);
File doneFile = new File(filePath);
if (! (doneFile.exists())){
logger.error("got here but file was not witten to disk ! id was" + key);
throw new IOException();
}
logger.info("6. start persist " + key + " path=" + new File(filePath).getAbsolutePath() + " exists="+doneFile.exists());
return;
} catch (IOException e) {
logger.error(objToSave + " failed on attamped " + i);
ex = e;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
throw ex;
}
答案 0 :(得分:0)
这不是java编写者的问题。 我没有明确地使用线程,但在我的测试中,我正在删除我正在使用的文件夹:Runtime.getRuntime(&#34; rm -rf saver_directory&#34;); 我发现它是异步的困难方式,确切的删除和创建时间在mili-seconds中发生了变化。 所以解决方案是添加&#34;睡眠&#34;删除后。 正确的答案是使用java进行删除而不是制作快捷方式;)
谢谢大家。