2010-12-03 95 views
6

我想從文件中讀取,然後刪除它,同時防止其他進程訪問它。這如何實現?鎖定文件並刪除它,而不先釋放鎖

FileLock無法工作,因爲在調用File.delete()之前您必須釋放鎖並關閉通道。我擔心的是,在釋放鎖之後,另一個進程可能會鎖定它並在文件被刪除之前開始讀取。

我正在使用Java 5並且此時不能升級到6。

+0

您描述的問題只發生在Windows上。這是平臺嗎? – EJP 2010-12-04 09:25:36

+0

我也能夠在Mac OS X上重現此問題。 – Tom 2010-12-06 18:31:21

+0

@EJP - 你可能會從字面上閱讀它。問題不在於您必須在調用File.delete()之前釋放鎖。您可以在釋放鎖之前調用File.delete(),但刪除將不起作用。該代碼將執行,但該方法將返回false並且以靜默方式失敗。 – Scrubbie 2010-12-07 17:24:44

回答

5

我不知道這是否可能,但一個簡單的解決方案是使用操作系統用戶和權限,以確保只有您的進程可以讀取文件。

另一種方法是將文件重命名爲隨機生成的字符串,然後鎖定,讀取,解鎖,然後刪除重命名的文件。理論上,另一個程序可以猜測文件名並在解鎖之後但在刪除之前讀取該文件。但實際上你可能會好起來的。

1

您可以將文件移動到備用位置(其他潛在進程無法找到它),然後在其中執行您的工作嗎?如果不是,在釋放鎖之前清除文件中的數據是什麼?