重要文件写操作请用FileOutputStream,FileWriter有坑


        使用FileWriter写文件,一、覆盖写入(会清空文件内容),二、追加写入;当使用FileWriter覆盖写入时,碰到设备突然断电,会容易导致文件变成空文件,文件内容彻底丢了。所以,对于不带电池的设备来讲,重要文件写操作不要使用FileWriter,请使用FileOutputStream;


FileOutputStream fos = null;

try {
    fos = new FileOutputStream("/sdcard/xxx.xml");

    //将buf中的数据写入fos
    fos.write(xxxx);

    //将fos的数据保存到内核缓冲区
    //不能确保数据保存到物理存储设备上,如突然断点可能导致文件未保存
    fos.flush();

    //将数据同步到达物理存储设备
    FileDescriptor fd = fos.getFD();
    fd.sync();

} catch(Exception e) {
    e.printStackTrace();
} finally {
    if(fos!=null)
        fos.close();
}

        使用FileOutputStream写文件碰到异常断电也会概率性出现文件变成空文件的情况,并不保险。所以,重要文件需要同时使用双备份机制。


重要说明:以上内容说明是基于fat格式文件系统。使用fat格式的文件系统,当对文件进行覆盖写操作时,异常掉电容易出现空文件的情况,究其原因正常不是存储芯片或者驱动问题,而是文件系统出了问题;所以fat格式一般用在带电池的设备;对于不带电池的设备,重要数据请保存到带日志功能的分区(比如ext4)才是安全的。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值