0

我的应用程序使用 Galaxy 选项卡的三星适配器写入外部 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

4

1 回答 1

3

您需要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 开发者博客文章了解更多信息。

于 2012-05-10T14:03:25.250 回答