我的应用程序使用三星适配器写入外部SD卡。当USB设备被"安全删除"时,文件都是正常的,但是当设备被不安全地删除时,所有新写入的文件都是0字节。
以下是代码的精简版本:
String json = "{some data to export}";
String folderPath = Environment.getExternalStorageDirectory().toString() + File.separator + "Storages" + File.separator + "usb" + File.separator + "sda";
File outputFile = new File(folderPath, "export.txt");
FileWriter writer = new FileWriter(outputFile);
BufferedWriter out = new BufferedWriter(writer);
out.write(json);
out.flush();
out.close();
如您所见,我正在刷新并关闭文件,但是在我看来,Android实际上并没有在卸载USB之前刷新内容。
显而易见的解决方案是告诉用户安全卸载,但我们都知道用户是什么样的。那么有没有办法强制Android以编程方式将文件内容刷新到SD卡?(除了 BufferedWriter.flush/BufferedWriter.close(
该设备是运行Android 3.1的三星Galaxy Tab 10.1 GT-P7510
在关闭文件之前sync()
文件。
FileOutputStream fos=new FileOutputStream(someLikelyFileObject);
BufferedOutputStream out=new BufferedOutputStream(fos);
try {
// write stuff to out
out.flush();
}
finally {
fos.getFD().sync();
out.close();
}
阅读这篇 Android 开发者博客文章,了解更多信息。