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!