1

定期使用PrintWriter将数据来自数据库的数据写入指定位置的 xml 文件。在当前运行中完全完成 xml 的生成之前,我不想删除现有的 xml 文件,因为如果在生成 xml 时出现任何问题,我将没有 xml 文件。希望有关处理这种情况的任何建议,其中当前文件的删除将推迟到在当前运行中生成/写入文件完全完成。

4

2 回答 2

2

您可以将新的 XML 写入临时文件,然后移动/重命名旧文件,然后将临时文件移动/重命名为真实文件名,最后删除旧文件。这样,您始终拥有一个文件,并且在新文件就位之前不要删除旧文件。

于 2011-05-07T00:37:39.783 回答
1

做这种事情的最常见方法是用不同的文件名重命名原始 XML 文件。

简单版:

If 'file.xml' exists Then
    If 'file.xml.bak' exists Then 
        remove 'file.xml.bak'
    Fi
    rename 'file.xml' as 'file.xml.bak'
Fi
generate XML to 'file.xml'

此版本的缺陷是,如果应用程序(或系统)在重命名后失败,下次运行该应用程序时可能会看到不完整或丢失的'file.xml'. 您可以通过让应用程序在检测到任一情况时尝试使用备份文件来解决此问题。

或者,您可以引入第三个文件;例如,让应用程序生成'file.xml.new'并在写入成功后进行重命名。在某些情况下,您仍然必须处理丢失'file.xml':除非您有事务文件系统,否则这是不可避免的。但是,失败的窗口较小,您应该始终完成当前和备份文件的副本。

于 2011-05-07T00:29:39.327 回答