android 外部存储知识

来源:互联网 发布:华为麦芒4移动网络 编辑:程序博客网 时间:2024/06/02 04:05
File 数据外部存储

每一个android设备支持一个共享“外部存储”,您可以使用它来保存文件。这可能是一个移动存储媒体(如一个SD卡)或一个内部(固定的)存储。文件保存到外部存储是公开的,可由用户修改他们。

注意:外部存储设备上的文件,所有的应用程序都可以访问它,甚至可以连接在电脑上直接修改。


获取android文件系统的信息,需要Environment类和StatFs类的支持。

(1)Environment 是一个提供访问环境变量的类,常用的方法有:

       A,getDataDirectory() ,返回File ,获取Android 数据目录。

       B,getDownloadCacheDirectory(),返回File ,获取Android 下载/缓存内容目录。

       C,getExternalStorageDirectory() ,返回File ,获取外部存储目录即SDCard。
       D,getExternalStorageState() ,返回File,获取外部存储设备的当前状态。

       E,getRootDirectory() ,返回File,获取Android 的根目录。

常用的变量,以getExternalStorageState返回值为例:

       A,MEDIA_BAD_REMOVAL,表明SDCard 被卸载前己被移除。
       B,MEDIA_CHECKING,表明对象正在磁盘检查。
       C,MEDIA_MOUNTED,表明对象存在并具有读/写权限。

       D,MEDIA_MOUNTED_READ_ONLY,表明对象权限为只读。

       E,MEDIA_NOFS,表明对象为空白或正在使用不受支持的文件系统。

       F,MEDIA_REMOVED,不存在SDCard。

       G,MEDIA_SHARED,表明存储媒体正在通过USB共享。
       H,MEDIA_UNMOUNTABLE,表明存储媒体无法挂载。

       I, MEDIA_UNMOUNTED,表明存储媒体没有挂载。

(2)StatFs类,一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况。StatFs 常用方法:

       A,getAvailableBlocks(),返回Int,获取当前可用的存储空间

       B,getBlockCount(),返回Int,获取该区域可用的文件系统数。

       C,getBlockSize(),返回Int ,大小,以字节为单位

       D,getFreeBlocks(),返回Int ,该块区域剩余的空间


获取SD卡可用容量及总量的实例

      //首先检查SD卡的状态,是否被挂载或移除
        if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            //拿到SD卡(外部存储设备,不一定是sd卡)的文件目录
            String path = Environment.getExternalStorageDirectory().getPath();
            //一个包装类,用来检索文件系统的信息
            StatFs stat =new StatFs(path);
            //文件系统的块的大小(byte)
            longblockSize = stat.getBlockSize();
            //文件系统的总的块数
            longtotalBlocks = stat.getBlockCount();
            //文件系统上空闲的可用于程序的存储块数
            longavailableBlocks = stat.getAvailableBlocks();
             
            //总的容量
            longtotalSize = blockSize*totalBlocks;
            longavailableSize = blockSize*availableBlocks;
             
            String totalStr = Formatter.formatFileSize(this, totalSize);
            String availableStr = Formatter.formatFileSize(this, availableSize);
             
            externalTv.setText("外部存储的容量"+"\n"+"总大小:"+totalStr+"\n"+"可用大小:"+availableStr);
        }
        else{
            Toast.makeText(this,
                    "SD卡不可用,请检查SD卡的状态",
                    Toast.LENGTH_LONG).show();
        }
0 0
原创粉丝点击