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