Android获取内部和外部内存空间大小

来源:未知 责任编辑:责任编辑 发表时间:2014-02-18 03:21 点击:

Android.os下的StatFs类主要用来获取文件系统的状态,能够获取sd卡的大小和剩余空间,获取系统内部空间也就是/system的大小和剩余空间等等。

看下读取sd卡的:

void readSDCard() {
 String state = Environment.getExternalStorageState();
 if (Environment.MEDIA_MOUNTED.equals(state)) {
  File sdcardDir = Environment.getExternalStorageDirectory();
  StatFs sf = new StatFs(sdcardDir.getPath());
  long blockSize = sf.getBlockSize();
  long blockCount = sf.getBlockCount();
  long availCount = sf.getAvailableBlocks();
  Log.d("" , "block大小:" + blockSize+ ",block数目:" + blockCount+ ",总大小:" +blockSize*blockCount/ 1024 + "KB" );
  Log.d("" , "可用的block数目::" + availCount+ ",剩余空间:" + availCount*blockSize/ 1024 + "KB" );
 }
}


然后看下读取系统内部空间的:


void readSystem() {
 File root = Environment.getRootDirectory();
 StatFs sf = new StatFs(root.getPath());
 long blockSize = sf.getBlockSize();
 long blockCount = sf.getBlockCount();
 long availCount = sf.getAvailableBlocks();
 Log.d("", "block大小:"+ blockSize+",block数目:"+ blockCount+",总大小:"+blockSize*blockCount/1024+"KB");
 Log.d("", "可用的block数目::"+ availCount+",可用大小:"+ availCount*blockSize/1024+"KB");
}
StatFs获取的都是以block为单位的,这里我解释一下block的概念:

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卡存储空间的总大小和可用大小了。

作者“liangoogle”
 

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    用户名: 验证码:点击我更换图片
    最新评论 更多>>

    推荐热点

    • Android 完全退出程序
    • 原创:Android应用开发-Andorid歌词秀,含源码
    • android 屏幕保护
    • Android手机软件汉化教程---第四课 dex文件汉化
    • 众多Android 开源项目推荐,给力工作给力学习
    • Android Audio代码分析4
    • Android得到已安装的应用程序信息!
    • Android开发者指南(29) —— USB Host and Accessory
    • Android成长的幕后推手:工程师鲁宾
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1