Android SDCard操作(文件读写,容量计算)

android.os.Environment

提供访问环境变量

java.lang.Object

android.os.Environment

Environment静态方法:

方法 :getDataDirectory()

返回 :File

解释 : 返回Data的目录

方法 :getDownloadCacheDirectory()

返回 :File

解释 : 返回下载缓冲区目录

方法 :getExternalStorageDirectory()

返回 :File

解释 : 返回扩展存储区目录(SDCard)


方法 :getExternalStoragePublicDirectory(Stringtype)

返回 :File

解释 : 返回一个高端的公用的外部存储器目录来摆放某些类型的文件(来自网上)

方法 :getRootDirectory()

返回 :File

解释 : 返回Android的根目录

方法 :getExternalStorageState()

返回 :String

解释 : 返回外部存储设备的当前状态

getExternalStorageState() 返回的状态String类型常量 :

常量 :MEDIA_BAD_REMOVAL

值 : "bad_removal"

解释 : 在没有正确卸载SDCard之前移除了

常量 : MEDIA_CHECKING

值 : "checking"

解释 : 正在磁盘检查

常量 :MEDIA_MOUNTED

值 : "mounted"

解释 : 已经挂载并且拥有可读可写权限

常量 :MEDIA_MOUNTED_READ_ONLY

值 : "mounted_ro"

解释 : 已经挂载,但只拥有可读权限

常量 : MEDIA_NOFS

值 : "nofs"

解释 : 对象空白,或者文件系统不支持

常量 :MEDIA_REMOVED

值 : "removed"

解释 : 已经移除扩展设备

常量 :MEDIA_SHARED

值 : "shared"

解释 : 如果SDCard未挂载,并通过USB大容量存储共享

常量 :MEDIA_UNMOUNTABLE

值 : "unmountable"

解释 : 不可以挂载任何扩展设备

常量 :MEDIA_UNMOUNTED

值 : "unmounted"

解释 : 已经卸载

使用时只需先判断SDCard当前的状态然后取得SdCard的目录即可(见源代码)

---------------------------------------------------------------------------------------------------------

  1. //SDcard操作
  2. ublicvoidSDCardTest(){
  3. //获取扩展SD卡设备状态
  4. StringsDStateString=android.os.Environment.getExternalStorageState();
  5. //拥有可读可写权限
  6. if(sDStateString.equals(android.os.Environment.MEDIA_MOUNTED)){
  7. try{
  8. //获取扩展存储设备的文件目录
  9. FileSDFile=android.os.Environment
  10. .getExternalStorageDirectory();
  11. //打开文件
  12. FilemyFile=newFile(SDFile.getAbsolutePath()
  13. +File.separator+"MyFile.txt");
  14. //判断是否存在,不存在则创建
  15. if(!myFile.exists()){
  16. myFile.createNewFile();
  17. }
  18. //写数据
  19. StringszOutText="Hello,World!";
  20. FileOutputStreamoutputStream=newFileOutputStream(myFile);
  21. outputStream.write(szOutText.getBytes());
  22. outputStream.close();
  23. }catch(Exceptione){
  24. //TODO:handleexception
  25. }//endoftry
  26. }//endofif(MEDIA_MOUNTED)
  27. //拥有只读权限
  28. elseif(sDStateString
  29. .endsWith(android.os.Environment.MEDIA_MOUNTED_READ_ONLY)){
  30. //获取扩展存储设备的文件目录
  31. FileSDFile=android.os.Environment.getExternalStorageDirectory();
  32. //创建一个文件
  33. FilemyFile=newFile(SDFile.getAbsolutePath()+File.separator
  34. +"MyFile.txt");
  35. //判断文件是否存在
  36. if(myFile.exists()){
  37. try{
  38. //读数据
  39. FileInputStreaminputStream=newFileInputStream(myFile);
  40. byte[]buffer=newbyte[1024];
  41. inputStream.read(buffer);
  42. inputStream.close();
  43. }catch(Exceptione){
  44. //TODO:handleexception
  45. }//endoftry
  46. }//endofif(myFile)
  47. }//endofif(MEDIA_MOUNTED_READ_ONLY)
  48. //endoffunc

计算SDCard的容量大小

android.os.StatFs

一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况

java.lang.Object

android.os.StatFs

构造方法:

StatFs(Stringpath)

公用方法:

方法 :getAvailableBlocks()

返回 : int

解释 :返回文件系统上剩下的可供程序使用的块

方法 :getBlockCount()

返回 : int

解释 : 返回文件系统上总共的块

方法 :getBlockSize()

返回 : int

解释 : 返回文件系统 一个块的大小单位byte

方法 :getFreeBlocks()

返回 : int

解释 : 返回文件系统上剩余的所有块 包括预留的一般程序无法访问的

方法 :restat(Stringpath)

返回 : void

解释 : 执行一个由该对象所引用的文件系统雷斯塔特.(Google翻译)


想计算SDCard大小和使用情况时, 只需要得到SD卡总共拥有的Block数或是剩余没用的Block数,再乘以每个Block的大小就是相应的容量大小了单位byte.(见代码)

Java代码
  1. publicvoidSDCardSizeTest(){
  2. //取得SDCard当前的状态
  3. StringsDcString=android.os.Environment.getExternalStorageState();
  4. if(sDcString.equals(android.os.Environment.MEDIA_MOUNTED)){
  5. //取得sdcard文件路径
  6. FilepathFile=android.os.Environment
  7. .getExternalStorageDirectory();
  8. android.os.StatFsstatfs=newandroid.os.StatFs(pathFile.getPath());
  9. //获取SDCard上BLOCK总数
  10. longnTotalBlocks=statfs.getBlockCount();
  11. //获取SDCard上每个block的SIZE
  12. longnBlocSize=statfs.getBlockSize();
  13. //获取可供程序使用的Block的数量
  14. longnAvailaBlock=statfs.getAvailableBlocks();
  15. //获取剩下的所有Block的数量(包括预留的一般程序无法使用的块)
  16. longnFreeBlock=statfs.getFreeBlocks();
  17. //计算SDCard总容量大小MB
  18. longnSDTotalSize=nTotalBlocks*nBlocSize/1024/1024;
  19. //计算SDCard剩余大小MB
  20. longnSDFreeSize=nAvailaBlock*nBlocSize/1024/1024;
  21. }//endofif
  22. //endoffunc
转载自:http://crackren.javaeye.com/blog/747121

更多相关文章

  1. Android: Android(安卓)Touch事件处理
  2. android之无返回结果跳转intent
  3. Android(安卓)Wifi模块相关常量定义.
  4. android小程序 查询电话号码信息
  5. Android(安卓)相机或者相册上传头像
  6. Android(安卓)沉浸式状态栏 开源 很好用
  7. 为android封装的百度定位组件
  8. Android(安卓)gallery与BaseaDapter的使用
  9. android webview点击返回键回到上一个html

随机推荐

  1. Android(安卓)GridView的使用方法
  2. 申请 android google map API key
  3. android Can't create handler inside th
  4. 我的Android之旅——UI界面六大布局之认
  5. Activity之间传递对象
  6. Android(安卓)5.X新特性详解
  7. [转]android animation的应用实例
  8. mvvm android 下的简单实践
  9. Android(安卓)SSH BusyBox
  10. Android中main.xml界面参数笔记