Java写一个文件 - 忽略系统磁盘缓存

时间:2014-10-03 09:44:30

标签: java io

我希望将一个文件写入磁盘并知道当writeFile()操作返回时,该文件肯定已写入磁盘并且已正确写入。

现在我可以在写完文件后对内容进行某种CRC校验(读回文件并进行比较),但我担心系统磁盘缓存。

有没有办法可以编写文件,跳过磁盘缓存或从Java刷新磁盘缓存?

我故意没有指定环境,因为拥有跨环境解决方案会很好。如果没有,我的环境是基于unix的环境。

1 个答案:

答案 0 :(得分:0)

FileChannel.force()将确保所有数据在返回之前已转到磁盘。

来自API doc

  

强制将此频道文件的任何更新写入存储   包含它的设备。

     

如果此频道的文件驻留在本地存储设备上,那么何时   这个方法返回它保证对文件做出的所有更改   由于此通道已创建,或者自上次调用此方法以来,   将被写入该设备。这对确保有用   在系统崩溃的情况下,关键信息不会丢失。

您可以通过RandomAccessFile获取FileOutputStreamgetChannel()的文件频道。