File 数据外部存储
每一个android设备支持一个共享“外部存储”,您可以使用它来保存文件。这可能是一个移动存储媒体(如一个SD卡)或一个内部(固定的)存储。文件保存到外部存储是公开的,可由用户修改他们。
注意:外部存储设备上的文件,所有的应用程序都可以访问它,甚至可以连接在电脑上直接修改。
获取android文件系统的信息,需要Environment类和StatFs类的支持。
(1)Environment 是一个提供访问环境变量的类,常用的方法有:
A,getDataDirectory() ,返回File ,获取Android 数据目录。
B,getDownloadCacheDirectory(),返回File ,获取Android 下载/缓存内容目录。
C,getExternalStorageDirectory() ,返回File ,获取外部存储目录即SDCard。 D,getExternalStorageState() ,返回File,获取外部存储设备的当前状态。
E,getRootDirectory() ,返回File,获取Android 的根目录。
常用的变量,以getExternalStorageState返回值为例:
A,MEDIA_BAD_REMOVAL,表明SDCard 被卸载前己被移除。 B,MEDIA_CHECKING,表明对象正在磁盘检查。 C,MEDIA_MOUNTED,表明对象存在并具有读/写权限。
D,MEDIA_MOUNTED_READ_ONLY,表明对象权限为只读。
E,MEDIA_NOFS,表明对象为空白或正在使用不受支持的文件系统。
F,MEDIA_REMOVED,不存在SDCard。
G,MEDIA_SHARED,表明存储媒体正在通过USB共享。 H,MEDIA_UNMOUNTABLE,表明存储媒体无法挂载。
I, MEDIA_UNMOUNTED,表明存储媒体没有挂载。
(2)StatFs类,一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况。StatFs 常用方法:
A,getAvailableBlocks(),返回Int,获取当前可用的存储空间。
B,getBlockCount(),返回Int,获取该区域可用的文件系统数。
C,getBlockSize(),返回Int ,大小,以字节为单位
D,getFreeBlocks(),返回Int ,该块区域剩余的
空间。
获取SD卡可用容量及总量的实例
//首先检查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();
}