java - 如何在android中安全地将文件保存到磁盘?

标签 java android embedded

我编写了一个 Android 应用程序,可以将(可能)大文件保存到 SD 卡。有时,我在写入操作期间会收到 IOException,这会导致文件处于损坏状态。基于对这个问题的回答:

Question: How to safely write to a file?

我应该使用的策略是创建一个临时文件,然后在写入完成后复制该文件。我的问题是:

1) 这是 Android 上最安全的方法吗? (例如,你可以复制 android sd 卡上的文件吗?如果可以的话,操作是原子的吗?)

2) 在资源(磁盘空间)有限的嵌入式系统中,有人知道另一种安全写入磁盘的策略吗? (而不是创建两个大文件)

谢谢

最佳答案

我知道回答这个问题为时已晚,但会帮助遇到此问题的任何人,他们会发现它很有帮助。

您需要使用 AtomicFile .

以下代码 fragment 可能会有所帮助。

public void writeFile(File file, byte[] data) {
    AtomicFile aFile = new AtomicFile(file);
    FileOutputStream fos = null;

    try {
        fos = aFile.startWrite();
        fos.write(data);
        // Close stream and commit new data.
        aFile.finishWrite(fos);
        fos = null;
    } catch (IOException e) {
        Log.e(TAG, "Cannot write file " + file.getPath(), e);
    } finally {
        if (fos != null) {
            // Something went wrong.
            // Close stream and roll back data.
            aFile.failWrite(fos);
        }
    }
}

关于java - 如何在android中安全地将文件保存到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940582/

相关文章:

java - Gradle 同步失败 : Could not find com. android.tools.build :gradle:4. 0.1

结构数组中的 gcc 成员初始化

c - 用于子级屏幕和菜单的嵌入式软件结构

c - 设置了 1 位的位掩码的名称

java - 错误的数据被分配给错误的变量

java - @ManyToOne 的 JPA 规范 CriteriaBuilder

java - 如何使用 CXF 更改 WebService 的名称?

java类没有任何方法,但在static关键字下包含逻辑

带有按钮和详细信息 Activity 的 Android 图片库

android - 如何替换 APK 中的 XML 文件?