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!
我正在使用此代码
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!