sdcard读写 默认android系统对每个app都开放读写功能。

默认路径为/mnt/sdcard/ 或者/sdcard/
写外部存储即sdcard的权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

打开关闭sdcard的权限

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>


http://www.itivy.com/android/archive/2011/7/4/android-sd-card-operation-file-and-capacity-compute.html


android.os.Environment
提供访问环境变量
java.lang.Object


android.os.Environment

Environment 静态方法:
方法 : getDataDirectory ()
返回 : File
解释 : 返回Data的目录

方法 : getDownloadCacheDirectory ()
返回 : File
解释 : 返回下载缓冲区目录


方法 : getExternalStorageDirectory ()
返回 : File
解释 : 返回扩展存储区目录(SDCard)


方法 : getExternalStoragePublicDirectory (String type)
返回 : 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的目录即可(见源代码)

[java] view plain copy print ?
  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 (String path)

公用方法:
方法 : getAvailableBlocks ()
返回 : int
解释 :返回文件系统上剩下的可供程序使用的块

方法 : getBlockCount ()
返回 : int
解释 : 返回文件系统上总共的块

方法 : getBlockSize ()
返回 : int
解释 : 返回文件系统 一个块的大小单位byte

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

方法 : restat (String path)
返回 : void
解释 : 执行一个由该对象所引用的文件系统雷斯塔特.(Google翻译)


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

[java] view plain copy print ?
  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

更多相关文章

  1. Android事件分发机制详解
  2. android 获取路径目录方法 以及 获取路径方法
  3. android noTouch 事件
  4. android的触摸屏事件
  5. 「React Native」Android返回键监听
  6. 丰富多彩的Android(安卓)onTouch事件
  7. Android(安卓)屏幕滑动事件
  8. android 开发积累
  9. Android(安卓)onTouch事件

随机推荐

  1. android语音识别和语音播报相关资料总结
  2. android 使用动画 Button移动后不响应点
  3. Android_开发 Android传感器(加速度传感器
  4. 获取与修改android自带日历日程
  5. 【Android】ImageMap,图片地图
  6. Android自定义Dialog以控制其位置和宽高
  7. 坚向的ViewPager,上下滑动的组件,android上
  8. Android中的MD5加密
  9. OpenGL ES教程V之更多3D模型(原文对照)
  10. andorid webview