Android SD卡的基本操作【备忘】

举报
ShaderJoy 发表于 2021/12/29 23:28:07 2021/12/29
【摘要】 sdcard读写 默认android系统对每个app都开放读写功能。 默认路径为/mnt/sdcard/ 或者/sdcard/  写外部存储即sdcard的权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE">...














































































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


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































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


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


  
  1. public void SDCardSizeTest() {
  2. // 取得SDCard当前的状态
  3. String sDcString = android.os.Environment.getExternalStorageState();
  4. if (sDcString.equals(android.os.Environment.MEDIA_MOUNTED)) {
  5. // 取得sdcard文件路径
  6. File pathFile = android.os.Environment
  7. .getExternalStorageDirectory();
  8. android.os.StatFs statfs = new android.os.StatFs(pathFile.getPath());
  9. // 获取SDCard上BLOCK总数
  10. long nTotalBlocks = statfs.getBlockCount();
  11. // 获取SDCard上每个block的SIZE
  12. long nBlocSize = statfs.getBlockSize();
  13. // 获取可供程序使用的Block的数量
  14. long nAvailaBlock = statfs.getAvailableBlocks();
  15. // 获取剩下的所有Block的数量(包括预留的一般程序无法使用的块)
  16. long nFreeBlock = statfs.getFreeBlocks();
  17. // 计算SDCard 总容量大小MB
  18. long nSDTotalSize = nTotalBlocks * nBlocSize / 1024 / 1024;
  19. // 计算 SDCard 剩余大小MB
  20. long nSDFreeSize = nAvailaBlock * nBlocSize / 1024 / 1024;
  21. }// end of if
  22. // end of func



文章来源: panda1234lee.blog.csdn.net,作者:panda1234lee,版权归原作者所有,如需转载,请联系作者。

原文链接:panda1234lee.blog.csdn.net/article/details/8687176

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。