Android - отключение питания после копирования файлов приводит к повреждению файлов

Я использую этот код

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

  FileUtils.copyInputStreamToFile(is, destFile);
}

И если пользователь удалит батарею телефона после этого for цикл затем некоторые файлы (длится) повреждены.

Можно ли это предотвратить?

Я попытался скопировать InputStream во временный каталог, а затем использовать

 FileUtils.moveFile(temp, destFile);

для каждого файла, но была та же проблема.

Можно ли как-нибудь закрыть скопированные файлы? Убедитесь, что они успешно скопированы?

1 ответ

Решение

Я решил эту проблему с помощью этого:

FileOutputStream out = new FileOutputStream(filename);

[...]

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

из концепции ввода-вывода flush vs sync

Просмотрите https://android.googlesource.com/platform/frameworks/base/+/cd92588/core/java/android/os/FileUtils.java и метод copyToFile(InputStream inputStream, File destFile) Это хороший пример, как это сделать.

Благодаря qbix!

Другие вопросы по тегам