获取android文件系统的信息,需要Environment类和StatFs类的支持。
(1)Environment 是一个提供访问环境变量的类,常用的方法有:
常用的字串变量,以getExternalStorageState返回值为例:
(2)StatFs类,一个模拟linux的df命令的类,成员函数是获得底层Linux文件系统的属性函数。StatFs 常用方法:
(3)一个获取系统和SD卡可用容量及总总量的实例,如下:
- import
android.os.Environment; - import
android.os.StatFs; - import
java.io.File; - public
long getAvailableInternalMemo rySize(){ -
File path = Environment.getDataDirectory(); -
StatFs stat = new StatFs(path.getPath()); -
long blockSize = stat.getBlockSize(); -
long availableBlocks = stat.getAvailableBlocks(); -
return availableBlocks*blockSize; - }
-
- public
long getTotalInternalMemorySi ze(){ -
File path = Environment.getDataDirectory(); -
StatFs stat = new StatFs(path.getPath()); -
long blockSize = stat.getBlockSize(); -
long totalBlocks = stat.getBlockCount(); -
return totalBlocks*blockSize; - }
-
- public
boolean externalMemoryAvailable(){ -
return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); - }
-
- public
long getAvailableExternalMemo rySize(){ -
if(externalMemoryAvailable()){ -
File path = Environment.getExternalStorageDirect ory(); -
StatFs stat = new StatFs(path.getPath()); -
long blockSize = stat.getBlockSize(); -
long availableBlocks = stat.getAvailableBlocks(); -
return availableBlocks*blockSize; -
} -
else{ -
return -1; -
} - }
-
- public
long getTotalExternalMemorySi ze(){ -
if(externalMemoryAvailable()){ -
File path = Environment.getExternalStorageDirect ory(); -
StatFs stat = new StatFs(path.getPath()); -
long blockSize = stat.getBlockSize(); -
long totalBlocks = stat.getBlockCount(); -
return totalBlocks*blockSize; -
} -
else{ -
return -1; -
} - }
- Log.i("zhangcheng","内部可用存储空间是:"+Long.toString(getAvailableInternalMemo
rySize()/(1024*1024))); - Log.i("zhangcheng","内部总共存储空间是:"+Long.toString(getTotalInternalMemorySi
ze()/(1024*1024))); -
- Log.i("zhangcheng","外部可用存储空间是:"+Long.toString(getAvailableExternalMemo
rySize()/(1024*1024))); - Log.i("zhangcheng","外部总共存储空间是:"+Long.toString(getTotalExternalMemorySi
ze()/(1024*1024)));
(4)需要注意的是,访问存储器文件系统,也需要在XML中添加权限,如下:
- <</SPAN>uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> - <</SPAN>uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> - <</SPAN>uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE"/>
==========================================================================================================
1. 如果没有定义安装位置,表示安装在手机内存上;
2. android:installLocation = "auto",表示先查看手机内存是否足够,如果够就安装在手机内存上,不够就安装在 T 卡上;
3. android:installLocation = "internalOnly",表示安装在手机内存上;
4. android:installLocation = "preferExternal" ,表示安装在 T 卡上;