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

我们新购买的磁盘或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. css弹性盒子

    body元素设置: <body> <div id="wai"> <div class="zi">1</div> ...

  2. SGU 208. Toral Tickets

    208. Toral Tickets time limit per test: 0.25 sec. memory limit per test: 65536 KB input: standard ou ...

  3. 【PAT】1003. 我要通过!(20)

    1003. 我要通过!(20) “答案正确”是自动判题系统给出的最令人欢喜的回复.本题属于PAT的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”. ...

  4. day4 二维数组旋转90度

    二维数组的旋转其实就是数组里面的元素对调的情况:下面有一个4×4的二维数组,[[0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3], [0, 1, 2, 3]],现在要求把 ...

  5. jquery.autocomplete修改 实现键盘上下键 自动填充

    根据需求要实现通过键盘上下移动,获得联想菜单中的值,如同google baidu的查询功能. 在网上找了很久没有找到可以实现该功能的插件,无奈只能自己动手改代码.找到js中的KEY.DOWN 和 KE ...

  6. checkbox 更改样式

    html: <div class="wrap"> <p>1. 勾选</p> <input type="checkbox" ...

  7. 【WPF】自定义控件之远程图片浏览

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  8. ref:Adding AFL Bloom Filter to Domato for Fun

    ref:https://www.sigpwn.io/blog/2018/5/13/adding-afl-bloom-filter-to-domato-for-fun Adding AFL Bloom ...

  9. Spring Boot 整合MyBatis(1)

    这篇文章介绍如何在Spring boot中整合Mybatis,其中sql语句采用注解的方式插入.后续文章将会介绍,如何使用xml方式. SSM SSH框架已经满足轻量级这个需求了,但是对于开发人员而言 ...

  10. JSP内置对象——application对象和out对象

    1.application 对象application用于保存所有应用程序的公有数据.它在服务器启动时自动创建,在服务器停止时销毁. 当application对象没有被销毁时,所有用户都可以共享该ap ...