【发布时间】:2014-10-03 09:44:30
【问题描述】:
我想写一个文件到磁盘,知道当writeFile()操作返回时,文件肯定已经写入磁盘并且被正确写入了。
现在我可以在文件写入后对内容进行某种 CRC 检查(读回文件并比较),但我担心系统磁盘缓存。
有没有办法可以写入文件、跳过磁盘缓存或从 Java 刷新磁盘缓存?
我故意不指定环境,因为如果有一个跨环境的解决方案会很好。如果不是,我的环境是基于 unix 的。
【问题讨论】:
我想写一个文件到磁盘,知道当writeFile()操作返回时,文件肯定已经写入磁盘并且被正确写入了。
现在我可以在文件写入后对内容进行某种 CRC 检查(读回文件并比较),但我担心系统磁盘缓存。
有没有办法可以写入文件、跳过磁盘缓存或从 Java 刷新磁盘缓存?
我故意不指定环境,因为如果有一个跨环境的解决方案会很好。如果不是,我的环境是基于 unix 的。
【问题讨论】:
FileChannel.force() 将确保所有数据在返回之前都已写入磁盘。
来自API doc:
强制将此频道文件的任何更新写入存储 包含它的设备。
如果此频道的文件驻留在本地存储设备上,那么当 此方法返回保证对文件所做的所有更改 自创建此通道以来,或自上次调用此方法以来, 将被写入该设备。这对于确保 在系统崩溃的情况下,关键信息不会丢失。
您可以通过getChannel() 获取来自RandomAccessFile 或FileOutputStream 的文件频道。
【讨论】: