【问题标题】:Java write a file - ignore system disk cacheJava写文件——忽略系统盘缓存
【发布时间】:2014-10-03 09:44:30
【问题描述】:

我想写一个文件到磁盘,知道当writeFile()操作返回时,文件肯定已经写入磁盘并且被正确写入了。

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

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

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

【问题讨论】:

    标签: java io


    【解决方案1】:

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

    来自API doc

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

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

    您可以通过getChannel() 获取来自RandomAccessFileFileOutputStream 的文件频道。

    【讨论】:

    • 这是否意味着刷新 JVM 缓冲区或操作系统缓冲区?
    • @cheetah 声明是在崩溃的情况下工作,所以一直到磁盘。
    猜你喜欢
    • 2021-10-18
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 2018-03-20
    • 2017-11-23
    • 2016-04-18
    相关资源
    最近更新 更多