【问题标题】:File become zero byte if system crashes in android如果系统在 android 中崩溃,文件变为零字节
【发布时间】:2012-07-19 06:24:21
【问题描述】:

我正在一个单独的线程中将一个对象写入一个文件,并且该线程每隔一分钟执行一次。一切正常,但如果系统崩溃(移除电源),那么文件(我正在写入对象的文件)大小在下次重新启动时变为零字节。

我的代码是:

FileOutputStream fileOut = new FileOutputStream("/sdcard/vis.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(/*An object*/);    
out.close();

【问题讨论】:

  • 你保存的是对象还是原始类型?

标签: java android


【解决方案1】:

这个想法是使用校验和来确保文件已正确写入,并按照 Whity 的建议使用重命名。

但是,如果您要保存原始类型,则可以使用SharedPreferences,这将避免您的“0 字节”问题。

This question 会让您更广泛地了解如何预防。

【讨论】:

    【解决方案2】:

    所以您担心以前的数据被破坏并且新的数据尚未保存? 您尝试在 tmp 文件中写入外壳,如果您设法关闭它,只需重命名?

    【讨论】:

    • 我知道这是解决方案,但我不想使用它
    • 这是传统方式。例如 torrent 下载文件到 tmp 文件,直到完成。你遇到的问题是经典的。打开要写入的文件无法正常关闭 - 文件内容丢失。还有附加布尔标志,但我认为它不是你的选择。
    猜你喜欢
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-30
    • 2020-12-31
    • 1970-01-01
    • 2022-11-11
    相关资源
    最近更新 更多