java保存的文件消失(ObjectOutputStream)

时间:2012-07-20 10:30:01

标签: java objectoutputstream

好吧,这是一个奇怪的。 第一次保存豁免通常有效(最多1次尝试)。
重负荷(连续多次保存)保存的文件消失
如果取消注释“Thread.sleep”,则会捕获错误,否则验证会成功通过

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;
}

1 个答案:

答案 0 :(得分:0)

这不是java编写者的问题。 我没有明确地使用线程,但在我的测试中,我正在删除我正在使用的文件夹:Runtime.getRuntime(&#34; rm -rf saver_directory&#34;); 我发现它是异步的困难方式,确切的删除和创建时间在mili-seconds中发生了变化。 所以解决方案是添加&#34;睡眠&#34;删除后。 正确的答案是使用java进行删除而不是制作快捷方式;)

谢谢大家。