Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java-如果强制重新启动PC,则会写入损坏的文件_Java_File_Io - Fatal编程技术网

Java-如果强制重新启动PC,则会写入损坏的文件

Java-如果强制重新启动PC,则会写入损坏的文件,java,file,io,Java,File,Io,我有一个简单的xml文件,每3秒钟更新一次(每次完全替换内容) 当计算机因任何原因重新启动时(或者我长时间按下电源按钮将其关闭),我遇到了一个问题—xml文件最终填充了零个字符。与正确的数据长度相同,但改为0 我尝试先保存到tmp文件,验证数据,如果数据看起来有效,则替换原始xml文件。没有帮助。看起来所有的验证工作都很好(SAXBuilder不会抛出异常,我可以找到适当的子注释等),但最终文件仍然损坏 我使用XMLOutputter和FileWriter将数据保存到临时文件中。 然后用成对的重

我有一个简单的xml文件,每3秒钟更新一次(每次完全替换内容)

当计算机因任何原因重新启动时(或者我长时间按下电源按钮将其关闭),我遇到了一个问题—xml文件最终填充了零个字符。与正确的数据长度相同,但改为0

我尝试先保存到tmp文件,验证数据,如果数据看起来有效,则替换原始xml文件。没有帮助。看起来所有的验证工作都很好(SAXBuilder不会抛出异常,我可以找到适当的子注释等),但最终文件仍然损坏

我使用XMLOutputter和FileWriter将数据保存到临时文件中。 然后用成对的重命名()替换原来的

如果我退出应用程序或从任务管理器中终止进程,所有这些都可以正常工作。只是重启/关机会破坏一切


任何关于发生这种情况原因的提示都将不胜感激。

之所以发生这种情况,是因为您在覆盖过程中强制重新启动了电脑。解决方法:不要。您当然应该保存到临时文件,但验证步骤毫无意义:如果您仍在执行,则只需在完成后重命名临时文件即可。如果不是,就不会发生。事实是,即使我不覆盖,数据仍然是全零。我只是不明白有效的xml数据在什么时候变成空字符。以及为什么文件不仅仅是由于写入中断而不完整的XML。它总是有正确的长度,但不是内容。。。(强制重新启动只是为了测试。客户的配置文件因断电或类似情况而损坏)这是一种可能发生的情况:1)截断文件,销毁旧内容2)写入新文件内容,这些内容保存在页面缓存中,3)但设置一个新的文件长度确实会使它进入磁盘4)计算机关闭,页面缓存中的数据会失效!这可能是恰当的:尤其是这里的第一个答案: