在写入内部存储之前检查存储是否已满

Zoe*_*Zoe -4 android saving-data android-internal-storage

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

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

Android 系统是否在此问题上做任何事情(例如显示一条消息,告诉用户设备上没有更多空间)?

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

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

Ari*_*Roy 7

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

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

 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;
    }
Run Code Online (Sandbox Code Playgroud)

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

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