Android - 复制文件后关闭电源导致文件损坏

Android - Power off after files are copied results in corrupted files

我正在使用此代码

for (Uri fileUri : files) {
  File destFile = ...
  InputStream is = getContentResolver().openInputStream(fileUri);

  FileUtils.copyInputStreamToFile(is, destFile);
}

并且如果用户在这个 for 周期后取出 phone 的电池,那么一些文件(持续)会损坏。

是否可以避免这种情况?

我尝试将 InputStream 复制到临时目录,然后使用

 FileUtils.moveFile(temp, destFile);

每个文件都有同样的问题。

我能以某种方式关闭复制的文件吗?确保复制成功?

我用这个解决了这个问题:

FileOutputStream out = new FileOutputStream(filename);

[...]

out.flush();
out.getFD().sync();

来自 I/O concept flush vs sync

查看 https://android.googlesource.com/platform/frameworks/base/+/cd92588/core/java/android/os/FileUtils.java 和方法 copyToFile(InputStream inputStream, File destFile) 这是如何解决这个问题的好例子。

感谢 qbix!