2011-05-24 78 views
1

可能重複:
How to atomically rename a file in Java, even if the dest file already exists?Java中的File.rename() - 它是一個原子操作嗎?

我與一個過程可能在工作中被殺死的工作。我想重命名一個文件。 Java的重命名操作是一個原子操作嗎?

我對Linux,HP-UX,Solaris和AIX的情況感興趣。

+1

也許這個問題可以幫助你:http://stackoverflow.com/questions/595631/how-to-atomically-rename-a-file-in-java-even-if-the-dest-file-already - 存在 – Marcelo 2011-05-24 15:24:20

+0

但是流程被殺的情況呢? – 2011-05-24 15:29:11

+0

@Marcelo:看起來另一個問題是關於通過重命名覆蓋的問題;這個問關於普通的重命名。 – 2012-08-18 23:10:27

回答

0

Rename操作可能會或可能不會是原子彈,它可能如果一個文件或目錄的目標name.On的Unix兩種不同的操作 必須進行下已經存在或可能不會成功 。首先必須測試目標名稱下是否存在文件。然後,如果不存在這樣的文件,則可以繼續並將源文件重命名爲目標名稱。在這兩個操作之間,可能會在目標名稱下創建一個新文件,並且由於rename()系統調用是原子操作並會銷燬目標,所以這個新文件將被刪除。

0

至少因爲虛擬機可能會殺死後究竟它留給你的代碼(您輸入File.rename()之後),並File.rename()之前的代碼開始運行。

+1

對不起,我正在回答錯誤的問題。我相信它應該是操作系統的一個屬性 – 2011-05-24 17:34:20