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

我们新购买的磁盘或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. DotNetOpenAuth实践之WCF资源服务器配置

    系列目录: DotNetOpenAuth实践系列(源码在这里) 上一篇我们写了一个OAuth2的认证服务器,我们也获取到access_token,那么这个token怎么使用呢,我们现在就来揭开 一般获 ...

  2. [原创] 基于RDP的桌面广播

    之前写过一篇使用C# UDP 组播技术做的桌面广播实现, C# 使用UDP组播实现局域网桌面共享.最终效果差强人意,UDP包在不同的交换机上发送还会出现发送失败的情况,所以又重新研究了一些新的方法,包 ...

  3. 用strtok函数分割字符串

    用strtok函数分割字符串 需要在loadrunner里面获得“15”(下面红色高亮的部分),并做成关联参数. //Body response 内容: <BODY><; PRE&g ...

  4. java总结(二)(运算符)

    算数和赋值运算符 1.变量类型溢出时候,会直接取反:出现x>x+1 2.知道a++和++a 3.知道a/0错误 a/0.0无穷大 字符串 1.知道栈区.堆区和方法区 2.知道new String ...

  5. windows下重置mysql的root密码方法介绍(转)

    自己在内网操作的,遇到了一些的问题,其中一个是需要重置密码的,所以网上找了两篇文章,都有一些借鉴的地方. 版本mysql5.7.2,linux系统 除了参考文章还有几点说明: service mysq ...

  6. 洛谷P4782 【模板】2-SAT问题 [2-SAT]

    题目传送门 [模板]2-SAT问题 题目背景 2-SAT 问题 模板 题目描述 有n个布尔变量 $x_1/~x_n$​ ,另有$m$个需要满足的条件,每个条件的形式都是“ $x_i$ 为$true/f ...

  7. NOIP2011 D1 T2选择客栈

    上题目: 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一家咖啡店,每 ...

  8. zookeeper分布式算法和部署

    算法摘要 安装 配置 监控 创建节点 二阶段提交(Two-Phase Commit) 投票和执行 协调者向参与者发送事务内容,询问是否可以提交,各参与者节点执行事务并向协调者反馈 如果所有参与者反馈y ...

  9. 将 Unity5.3 的老项目升级到 Unity 2018.3 遇到的些许问题。

    删除 ParticleEmmiter 等废弃的接口: 删除 WindowsSecurityContext System.Security.Principal.WindowsIdentity 在 .Ne ...

  10. Contains,Exists,Any,Count 比较是否存在某个元素

    private static void Main(string[] args) { ; Console.WriteLine("判断是否存在某个元素 :"); Console.Wri ...