2014-10-03 95 views
2

我希望將文件寫入磁盤,並且知道當writeFile()操作返回時,文件肯定已寫入磁盤並被正確寫入。Java寫入文件 - 忽略系統磁盤緩存

現在我可以對文件寫入後的內容進行一些CRC校驗(讀迴文件並進行比較),但我擔心繫統磁盤高速緩存。

有沒有一種方法可以寫入文件,跳過磁盤緩存或從Java刷新磁盤緩存?

我有目的地沒有指定一個環境,因爲它有一個交叉環境解決方案是很好的。如果沒有,我的環境是基於unix的環境。

回答

0

FileChannel.force()將確保所有數據在返回之前已將其寫入磁盤。

API doc

力量來此通道的文件更新寫入包含該文件的存儲設備 。

如果此通道的文件駐留在本地存儲設備上,那麼當 該方法返回時,可以保證的是,由於該通道的文件 所做的所有更改創建,或自上次調用此方法, 將被寫入到那個設備。這對確保 重要信息在系統崩潰時不會丟失很有用。

你可以從RandomAccessFileFileOutputStream一個文件通道保持,通過getChannel()

+0

這是否意味着刷新JVM緩衝區或操作系統緩衝區? – Cheetah 2014-10-03 14:29:17

+0

@cheetah它聲明它在發生崩潰時起作用,所以它一直到磁盤。 – 2014-10-03 16:57:59