先来了解一下存储卡的相关知识:

我们新购买的磁盘或SD卡在使用之前,要让操作系统认得它,须先写入一些磁性的记号到磁盘上的每一扇区,便可在该操作系统下取用磁盘上的数据,这个过程就是格式化。

格式化可以直白地看作把你的磁盘或SD卡分成若干个小格(block),然后才能往里面存数据,每个文件所占的“小格”是不同的。如果没有进行格式化是无法存数据的,现在买来的SD卡一般都已经格式化好了,可以直接用。

可以做一个小实验,你可以在Windows系统下新建一个文本文件,然后往里面写入一个字符,查看属性里面的大小是1字节,但是占用空间却是4kb(4096个字节),只有当你的存储内容超过了4kb,这时,文件的占用空间又变为8kb,由此可以看出,文件的存储块的大小事4kb。

现在来看看如何通过代码拿到android的内外存储器的大小:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); externalTv = (TextView) findViewById(R.id.tv1);
internalTv = (TextView) findViewById(R.id.tv2); //首先检查SD卡的状态,是否被挂载或移除
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
//拿到SD卡(外部存储设备,不一定是sd卡)的文件目录
String path = Environment.getExternalStorageDirectory().getPath();
//一个包装类,用来检索文件系统的信息
StatFs stat = new StatFs(path);
//文件系统的块的大小(byte)
long blockSize = stat.getBlockSize();
//文件系统的总的块数
long totalBlocks = stat.getBlockCount();
//文件系统上空闲的可用于程序的存储块数
long availableBlocks = stat.getAvailableBlocks(); //总的容量
long totalSize = blockSize*totalBlocks;
long availableSize = 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();
} File path = Environment.getDataDirectory();
StatFs stat = new StatFs(path.getPath()); //文件系统的块的大小(byte)
long blockSize1 = stat.getBlockSize();
//文件系统的总的块数
long totalBlocks1 = stat.getBlockCount();
//文件系统上空闲的可用于程序的存储块数
long availableBlocks1 = stat.getAvailableBlocks(); //总的容量
long totalSize1 = blockSize1*totalBlocks1;
long availableSize1 = blockSize1*availableBlocks1; String totalStr1 = Formatter.formatFileSize(this, totalSize1);
String availableStr1 = Formatter.formatFileSize(this, availableSize1); internalTv.setText("内部存储的大小"+"\n"+"总大小:"+totalStr1+"\n"+"可用大小:"+availableStr1);
}

Android之获取内外部存储器的容量的更多相关文章

  1. Android开发获取多个存储空间的路径(内置SD卡以及外置SD卡)

    Android开发中经常会遇到多存储空间的问题,包括内置存储路径以及外置SD卡,而且有的时候会有多张外置SD卡,此时就需要获取不同的SD卡路径,然后根据需要来写入或者读出文件. 此处给出常用的SD卡工 ...

  2. URL转Drawable之 Android中获取网络图片的三种方法

    转载自: http://doinone.iteye.com/blog/1074283 Android中获取网络图片是一件耗时的操作,如果直接获取有可能会出现应用程序无响应(ANR:Applicatio ...

  3. android 中获取视频文件的缩略图(非原创)

    在android中获取视频文件的缩略图有三种方法: 1.从媒体库中查询 2. android 2.2以后使用ThumbnailUtils类获取 3.调用jni文件,实现MediaMetadataRet ...

  4. android自动获取短信验证码

    前言:android应用的自动化测试必然会涉及到注册登录功能,而许多的注册登录或修改密码功能常常需要输入短信验证码,因此有必要能够自动获得下发的短信验证码.主要就是实时获取短信信息.android上获 ...

  5. android EditText获取光标位置并安插字符删除字符

    android EditText获取光标位置并插入字符删除字符1.获取光标位置int index = editText.getSelectionStart(); 2.在光标处插入字符int index ...

  6. android程序获取WIFI的IP地址和MAC地址

    转自:http://my.oschina.net/chenj/blog/68680 近日在鼓捣这玩意,拿出来大家分享一下,代码比较简单,如果有不懂的再问 <Button android:id=& ...

  7. Android中获取应用程序(包)的大小-----PackageManager的使用(二)

    通过第一部分<<Android中获取应用程序(包)的信息-----PackageManager的使用(一)>>的介绍,对PackageManager以及 AndroidMani ...

  8. Android中获取正在运行的应用程序-----ActivityManager.RunningAppProcessInfo类详解

    今天继续讲解关于ActivityManager的使用,通过前面一节的学习,我们学会了如何利用ActivityManager获取系统里 正在运行的进程.本文要讲解的知识点是利用这些进程信息获取系统里正在 ...

  9. android中获取时间

    android中获取时间 1)通过calendar类获取 Calendar calendar = Calendar.getInstance();int moth = calendar.get(Cale ...

随机推荐

  1. MVC – 4.mvc初体验(2)

    5.显示学员列表 效果 数据表 5.1 首先,在文件夹Models新建一个新建项(W),选择ADO.NET 实体数据模型 (SingleTest.edmx) 5.2 建一个控制器,StudentsCo ...

  2. zabbix 监控 oracle 数据库

    https://blog.csdn.net/dyllove98/article/details/41120853

  3. EditText属性描述

    android:layout_gravity="center_vertical"//设置控件显示的位置:默认top,这里居中显示,还有bottom android:hint=&qu ...

  4. vue-router history 模式 iis 配置

    首先需要安装 url rewrite模块到IIS点我安装 然后在web.config文件中添加如下配置 <?xml version="1.0" encoding=" ...

  5. Python内置函数__slots__

    ''' 1.__slots__是什么:是一个类变量,变量值可以是列表,元祖,或者可迭代对象,也可以是一个字符串(意味着所有实例只有一个数据属性) 2.引子:使用点来访问属性本质就是在访问类或者对象的_ ...

  6. JVM的内存结构,JVM的回收机制

    内存作为系统中重要的资源,对于系统稳定运行和高效运行起到了关键的作用,Java和C之类的语言不同,不需要开发人员来分配内存和回收内存,而是由JVM来管理对象内存的分配以及对象内存的回收(又称为垃圾回收 ...

  7. 「BZOJ 4502」串

    「BZOJ 4502」串 题目描述 兔子们在玩字符串的游戏.首先,它们拿出了一个字符串集合 \(S\),然后它们定义一个字符串为"好"的,当且仅当它可以被分成非空的两段,其中每一段 ...

  8. [BZOJ4560][JLOI2016]字符串覆盖(贪心+DP)

    先用KMP求出所有可以放的位置,然后两个值分别处理. 最大值: 贪心,4!枚举放的先后位置顺序,2^3枚举相邻两个串是否有交. 若有交,则后一个的起始位置一定是离前一个的结束位置最近的位置,无交也一样 ...

  9. 【尺取法好题】POJ2566-Bound Found

    [题目大意] 给出一个整数列,求一段子序列之和最接近所给出的t.输出该段子序列之和及左右端点. [思路] ……前缀和比较神奇的想法.一般来说,我们必须要保证数列单调性,才能使用尺取法. 预处理出前i个 ...

  10. [转]runOnUiThread 、 Handler 对比(一)

      this.runOnUiThread(new Runnable() { @Override public void run() { try { Thread.sleep(1000 * 5); }  ...