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(); 

 
 
  
 }