使用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)才是安全的。