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

时间:2017-03-12 14:38:08

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

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

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

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

主要关注的是确保在适用的驱动器上进行检查;如果应用程序已被移动到SD卡或其他外部存储单元,那么就剩余内存而言应该检查的驱动器

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

2 个答案:

答案 0 :(得分:3)

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

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

 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()方法获取文件的大小。它将以字节为单位返回每个文件的大小。

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

答案 1 :(得分:1)

  

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

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

  

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

AFAIK,它不会实时这样做。 IOW,用户可能会不时收到有关他们的设备开始变低空间的通知,但这些消息的时间安排与应用程序的运行无关。这是一个设备范围的警告,而不是应用程序即将编写文件的OMG!"警告。