【问题标题】:Checking if the storage is full before writing to internal storage [duplicate]在写入内部存储之前检查存储是否已满[重复]
【发布时间】:2017-03-12 14:38:07
【问题描述】:

我使用内部数据(应用程序的私有数据)来保存数据。

但是,如果设备存储空间不足,如何在保存前检查存储空间是否已满?如果写入文件的数据非常大,导致设备的存储空间变满,我该如何检查并通知用户/防止应用显示强制关闭对话框?

Android 系统是否针对此问题采取任何措施(例如显示一条消息,告诉用户设备上没有更多空间)?

主要关注的是确保检查发生在适用的驱动器上;如果应用程序已移至 SD 卡或其他一些外部存储单元,则应根据剩余内存检查该驱动器

示例场景:设备剩余 238KB。有 10 个文件保存数据。每个文件为 30-40KB。假设平均为 35KB/文件,可以写入 6 个文件,而最后 4 个不能。我该如何处理此类问题?

【问题讨论】:

    标签: android saving-data android-internal-storage


    【解决方案1】:

    您已经问了几个问题,但在继续任何文件写入操作之前,您只需简单检查一下是否有可用的存储内存

    您可以使用此实用方法快速检查设备上的可用存储空间,

     public static long getAvailableInternalMemorySize() {
            File path = Environment.getDataDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize, availableBlocks;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
                blockSize = stat.getBlockSizeLong();
                availableBlocks = stat.getAvailableBlocksLong();
            } else {
                blockSize = stat.getBlockSize();
                availableBlocks = stat.getAvailableBlocks();
            }
            return availableBlocks * blockSize;
        }
    

    如您所知,您可以使用文件的length() 方法获取文件的大小。它将返回每个文件的大小(以字节为单位)。

    您需要做的就是将您打算写入的文件的大小与可用的存储内存进行比较。如果文件大小小于可用的总存储空间,您可以继续写入文件。

    【讨论】:

    • 返回可用空间的字节数,对吧?
    • 是的,这正是您想要比较的。
    • 如果我的应用尝试向系统写入文件,但文件大于剩余空间怎么办?应用程序将如何响应?如果它导致崩溃,我该如何预防?
    • 在写入文件之前,您需要检查可用空间(以字节为单位)是否大于您的文件大小(以字节为单位)。如果是这样,请写入文件。
    • 您的问题解决了吗?您还有其他疑问吗?
    【解决方案2】:

    如何在保存前检查内存是否已满?

    Use StatFs 找出可用磁盘空间的数量,给出您感兴趣的分区上某个位置的路径。

    Android 系统是否针对此问题采取任何措施(例如显示一条消息,告诉用户设备上没有更多空间)?

    AFAIK,它不会实时这样做。 IOW,可能会不时通知用户他们的设备开始空间不足,但这些消息的时间与您的应用程序的运行无关。这是一个设备范围的警告,而不是“OMG,应用程序即将写入文件!”警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2017-08-24
      • 2012-10-13
      • 2018-07-11
      • 1970-01-01
      相关资源
      最近更新 更多