2011-05-07 48 views
1

定期使用PrintWriter向指定位置的xml文件寫入來自數據庫的數據。 我不想刪除現有的xml文件,直到xml的生成在當前運行中完全完成,因爲在生成xml的任何問題的情況下,我將留下沒有xml文件。 希望能夠處理這種情況的任何建議,其中當前文件的刪除將延遲到在當前運行中生成/寫入文件完全完成。刪除先前的XML文件,直到使用Java生成新文件

回答

2

您可以將新的XML寫入臨時文件,然後移動/重命名舊文件,然後將臨時文件移動/重命名爲真實文件名,最後刪除舊文件。這樣,您始終擁有一個文件,並且在新文件到位之前不要刪除舊文件。

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':除非您有事務性文件系統,否則它是不可避免的。但是,失敗的窗口較小,您應該始終完成當前和備份文件的副本。

+0

如何在當前運行中以不同名稱生成文件,然後生成當前運行中的文件..刪除以前的文件並重命名當前文件。 – 2011-05-07 00:42:18

+0

@John C - 是的...儘管您假定重命名不會以刪除正嘗試重命名的文件的方式失敗。 (在大多數情況下,這是一個公平的假設。) – 2011-05-07 00:47:32

+0

+1。除非先前文件的刪除成功,否則我不會嘗試重命名。 – 2011-05-07 00:47:45