2014-10-03 44 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