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

我们新购买的磁盘或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. CSU 1355 地雷清除计划

    题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1355 好题,根本想不到是网络流. 模型如图: 假想从右上角到左下角有一条阻拦线,我们就是 ...

  2. csv 文件乱码问题

    问题背景: Pandas.DataFrame 数据结构df在调用df.to_csv()方法生成csv文件格式的字符串(调用df.to_csv('test.csv')直接生成文件也有这个问题)作为字符串 ...

  3. day4正则表达式

    语法: 正则表达式是处理字符串的函数,我们在Excel函数中也有很多这样的公式,因为学过一些Excel,所以看一下有什么不同的方法. import re       #导入re模块,处理正则表达式的模 ...

  4. review-反思当程序猿的小一年来

    误打误撞进入这个行业,也算是缘分把,不到一年的时光里,剖析一下自己,别写了半天代码,学了一堆东西,不知道干嘛.反省一下. 1.目标与知识库 就目前在我看来,是想成为一名优秀的数据工程师,掌握全栈数据分 ...

  5. ASP.NET MVC 获取计算机字体

    //加载计算机上可用的字体 public string LoadFonts() { try { var fontCollection = new InstalledFontCollection(); ...

  6. mean(bootstrap,angular,express,node,mongodb)通用后台框架

    学习node,我这个毫无美感的程序员在bootstrap与node的感染下,向着“全栈工程师”迈进,呵呵! 最终选择如题的技术方案,这些东东都算比较新的,网上的资料比较少,参考了不少github程序及 ...

  7. 使用Unity解耦你的系统—PART4——Unity&PIAB

    在前面几篇有关Unity学习的文章中,我对Unity的一些常用功能进行介绍,包括:Unity的基本知识.管理对象之间的关系.生命周期.依赖注入等,今天则是要介绍Unity的另外一个重要功能——拦截(I ...

  8. 湖南大学ACM程序设计新生杯大赛(同步赛)I - Piglet treasure hunt Series 1

    题目描述 Once there was a pig, which was very fond of treasure hunting. The treasure hunt is risky, and ...

  9. js中箭头函数和普通函数this的区别

    最近在学习angularJs的时候由于里面涉及到了箭头函数,箭头函数除了声明上有点区别以外,和普通函数最主要的区别还是在this的问题上. Js中函数中嵌套的函数this不会 “继承”.比如说以下代码 ...

  10. 简单了解Linux的inode与block

    Linux常见文件系统类型:ext3(CentOS5),ext4(CentOS6),xfs(CentOS7) Windows常见文件系统类型:FAT32,NTFS (1).inode的内容 1)ino ...