我希望将文件写入磁盘,并知道当writeFile()
操作返回时,文件肯定已写入磁盘并正确写入。
现在,我可以在文件写入后对内容进行某种CRC检查(读回文件并进行比较),但我担心系统磁盘缓存。
有没有一种方法可以写文件,跳过磁盘缓存,或者从Java中刷新磁盘缓存?
我特意没有指定环境,因为有一个跨环境的解决方案会很好。如果没有,我的环境是基于unix的。
FileChannel.force()
将确保所有数据在返回之前都已到达磁盘。
来自API文件:
强制将对此频道文件的任何更新写入存储器包含它的设备。
如果此通道的文件位于本地存储设备上,则当该方法返回保证对文件所做的所有更改由于创建了该通道或者由于上次调用了该方法,将被写入该设备。这有助于确保关键信息在系统崩溃的情况下不会丢失。
您可以通过getChannel()
从RandomAccessFile
或FileOutputStream
获取文件频道。