• 获取手机内部存储空间和外部存储空间


    转自 http://blog.163.com/hero_213/blog/static/39891214201162123236660/

    该代码片段可以让我们获取internal和external的存储空间大小。 

    import java.io.File;                                                                                                

    import android.os.Environment;    
    import android.os.StatFs;    
        
    public class StorageUtil {

        private static final int ERROR = -1;

        /**
         * SDCARD是否存
         */
        public static boolean externalMemoryAvailable() {
            return android.os.Environment.getExternalStorageState().equals(
                    android.os.Environment.MEDIA_MOUNTED);
        }

        /**
         * 获取手机内部剩余存储空间
         * @return
         */
        public static long getAvailableInternalMemorySize() {
            File path = Environment.getDataDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long availableBlocks = stat.getAvailableBlocks();
            return availableBlocks * blockSize;
        }

        /**
         * 获取手机内部总的存储空间
         * @return
         */
        public static long getTotalInternalMemorySize() {
            File path = Environment.getDataDirectory();
            StatFs stat = new StatFs(path.getPath());
            long blockSize = stat.getBlockSize();
            long totalBlocks = stat.getBlockCount();
            return totalBlocks * blockSize;
        }

        /**
         * 获取SDCARD剩余存储空间
         * @return
         */
        public static long getAvailableExternalMemorySize() {
            if (externalMemoryAvailable()) {
                File path = Environment.getExternalStorageDirectory();
                StatFs stat = new StatFs(path.getPath());
                long blockSize = stat.getBlockSize();
                long availableBlocks = stat.getAvailableBlocks();
                return availableBlocks * blockSize;
            } else {
                return ERROR;
            }
        }

        /**
         * 获取SDCARD总的存储空间
         * @return
         */
        public static long getTotalExternalMemorySize() {
            if (externalMemoryAvailable()) {
                File path = Environment.getExternalStorageDirectory();
                StatFs stat = new StatFs(path.getPath());
                long blockSize = stat.getBlockSize();
                long totalBlocks = stat.getBlockCount();
                return totalBlocks * blockSize;
            } else {
                return ERROR;
            }
        }
    }

    1.硬件上的 block size, 应该是"sector size",linux的扇区大小是512byte
    2.有文件系统的分区的block size, 是"block size",大小不一,可以用工具查看
    3.没有文件系统的分区的block size,也叫“block size”,大小指的是1024 byte
    4.Kernel buffer cache 的block size, 就是"block size",大部分PC是1024
    5.磁盘分区的"cylinder size",用fdisk 可以查看。

          我们这里的block size是第二种情况,一般SD卡都是fat32的文件系统,block size是4096.

          这样就可以知道手机的内部存储空间和sd卡存储空间的总大小和可用大小了

    路漫漫其修远兮 吾将上下而求索
  • 相关阅读:
    Delphi TcxComboBox控件说明
    Delphi ComboBox的属性和事件、及几个鼠标事件的触发
    Delphi XE5的新功能“ TListView内置搜索过滤”
    可能是全网最全的解决摄像头无法创建视频捕捉过滤器问题?
    Delphi – TDataSet确定它是否在插入/编辑状态时被修改
    Delphi 获取DataSet传入参数后的SQL命令
    TClientDataSet[7]: 辨析 Field、FieldDef、Fields、FieldDefs、FieldList、FieldDefList
    枚举HasFlag函数实现的内部逻辑是什么
    在DBGrid中用代码实现按回车键跳到下一格的方法
    eclipse下没有Dynamic Web Project的处理方法
  • 原文地址:https://www.cnblogs.com/hudabing/p/3426288.html
Copyright © 2020-2023  润新知