SD卡作为手机的扩展存储设备,在手机中充当硬盘角色,可以让我们手机存放更多的数据以及多媒体等大体积文件。因此查看SD卡的内存就跟我们查看硬盘的剩余空间一样,是我们经常操作的一件事,那么在Android开发中,我们如何能获取SD卡的内存容量呢?

首先,要获取SD卡上面的信息,必须先对SD卡有访问的权限,因此第一件事就是需要添加访问扩展设备的权限。

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

其次,需要判断手机上面SD卡是否插好,如果有SD卡的情况下,我们才可以访问得到并获取到它的相关信息,当然以下这个语句需要用if做判断。

  1. Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)

取得sdcard文件路径

  1. File path = Environment.getExternalStorageDirectory();
  2. StatFs statfs = new StatFs(path.getPath());

获取block的SIZE

  1. long blocSize = statfs.getBlockSize();

获取BLOCK数量

  1. long totalBlocks = statfs.getBlockCount();

空闲的Block的数量

  1. long availaBlock = statfs.getAvailableBlocks();

计算总空间大小和空闲的空间大小

储空间大小跟空闲的存储空间大小就被计算出来了。

  1. /**
  2.  
  3. * 取得空闲sd卡空间大小
  4.  
  5. * @return
  6.  
  7. */
  8.  
  9. public long getAvailaleSize(){
  10.  
  11. File path = Environment.getExternalStorageDirectory(); //取得sdcard文件路径
  12.  
  13. StatFs stat = new StatFs(path.getPath());
  14.  
  15. /*获取block的SIZE*/
  16.  
  17. long blockSize = stat.getBlockSize();
  18.  
  19. /*空闲的Block的数量*/
  20.  
  21. long availableBlocks = stat.getAvailableBlocks();
  22.  
  23. /* 返回bit大小值*/
  24.  
  25. return availableBlocks * blockSize;
  26.  
  27. //(availableBlocks * blockSize)/1024 KIB 单位
  28.  
  29. //(availableBlocks * blockSize)/1024 /1024 MIB单位
  30.  
  31. }
  32.  
  33. /**
  34.  
  35. * SD卡大小
  36.  
  37. * @return
  38.  
  39. */
  40.  
  41. public long getAllSize(){
  42.  
  43. File path = Environment.getExternalStorageDirectory();
  44.  
  45. StatFs stat = new StatFs(path.getPath());
  46.  
  47. /*获取block的SIZE*/
  48.  
  49. long blockSize = stat.getBlockSize();
  50.  
  51. /*块数量*/
  52.  
  53. long availableBlocks = stat.getBlockCount();
  54.  
  55. /* 返回bit大小值*/
  56.  
  57. return availableBlocks * blockSize;
  58.  
  59. }

Android 文件的浏览(类似于FileDialog的功能)

首先说一下这个文件浏览的简单实现原理:

首先选择一个目录做为根目录,然后打开此目录,常用的就是使用File这个类了,如下:

  1. File file=new File(path);

然后可以通过获取到此目录下所有文件及文件夹的列表:

如下:

  1. File[] files = file.listFiles();

然后再根据根据得到的文件,来判断是文件夹还是文件,如果是文件夹,那么我们就将文件夹添加到列表中,如果是文件那么就把文件添加到列表中进行显示,如果需要显示图标的话,那么就需要根据文件的后缀,设置不同的图标了。我是在ListView中进行显示的。

基本代码如下:

  1. for (File currentFile : files)
  2. {
  3. //判断是一个文件夹还是一个文件
  4. if (currentFile.isDirectory())
  5. {
  6. currentIcon = getResources().getDrawable(R.drawable.folder);
  7. }
  8. else
  9. {
  10. //取得文件名
  11. String fileName = currentFile.getName();
  12. //根据文件名来判断文件类型,设置不同的图标
  13. if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingImage)))
  14. {
  15. currentIcon = getResources().getDrawable(R.drawable.image);
  16. }
  17. else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingWebText)))
  18. {
  19. currentIcon = getResources().getDrawable(R.drawable.webtext);
  20. }
  21. else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingPackage)))
  22. {
  23. currentIcon = getResources().getDrawable(R.drawable.packed);
  24. }
  25. else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingAudio)))
  26. {
  27. currentIcon = getResources().getDrawable(R.drawable.audio);
  28. }
  29. else if (checkEndsWithInStringArray(fileName, getResources().getStringArray(R.array.fileEndingVideo)))
  30. {
  31. currentIcon = getResources().getDrawable(R.drawable.video);
  32. }
  33. else
  34. {
  35. currentIcon = getResources().getDrawable(R.drawable.text);
  36. }
  37. }

下面是根据后缀对文件的类型进行的判断:

  1. //通过文件名判断是什么类型的文件
  2. private boolean checkEndsWithInStringArray(String checkItsEnd,
  3. String[] fileEndings)
  4. {
  5. for(String aEnd : fileEndings)
  6. {
  7. if(checkItsEnd.endsWith(aEnd))
  8. return true;
  9. }
  10. return false;
  11. }

再贴一段自己的代码,获取SD卡文件名

  1. private void initData() {
  2.  
  3. // 判断是否有外存储设备
  4.  
  5. if (Environment.getExternalStorageState().equals(
  6.  
  7. Environment.MEDIA_MOUNTED)) {
  8.  
  9. File path = Environment.getExternalStorageDirectory();
  10.  
  11. File file = new File(path.getPath());
  12.  
  13. File[] files = file.listFiles();
  14.  
  15. getFileName(files);
  16.  
  17. }
  18.  
  19. }
  20.  
  21. private void getFileName(File[] files) {
  22.  
  23. for (File currentFile : files) {
  24.  
  25. // 判断是一个文件夹还是一个文件
  26.  
  27. if (currentFile.isDirectory()) {
  28.  
  29. getFileName(currentFile.listFiles());
  30.  
  31. } else {
  32.  
  33. // 取得文件名
  34.  
  35. String fileName = currentFile.getName();
  36.  
  37. // 获取.info后缀的文件
  38.  
  39. if (fileName.endsWith(".info"))
  40.  
  41. // 保存去掉后缀的文件名
  42.  
  43. names.add(fileName.substring(, fileName.lastIndexOf(".")));
  44.  
  45. }
  46.  
  47. }
  48.  
  49. }

android 读取SD卡文件的更多相关文章

  1. android 读取sd卡中的图片

    一.获取读取SD卡的权限 <!--在SDCard中创建与删除文件权限  -->    <uses-permission android:name="android.perm ...

  2. android 读写SD卡文件

    参考: http://www.oschina.net/code/snippet_176897_7336#11699 写文件: private void SavedToText(Context cont ...

  3. Android读取sd卡

    public static String[] getStoragePaths() { List<String> pathsList = new ArrayList<String> ...

  4. Android 读写SD卡的文件

    今天介绍一下Android 读写SD卡的文件,要读写SD卡上的文件,首先需要判断是否存在SD卡,方法: Environment.getExternalStorageState().equals(Env ...

  5. Android_(控件)使用ListView显示Android系统SD卡的文件列表_02

    使用ListView显示Android SD卡中的文件列表 父类布局activity_main.xml,子类布局item_filelayout(一个文件的单独存放) 运行截图: 程序结构 <?x ...

  6. android开发SD卡工具类(一)

    SD卡工具类整理: package com.gzcivil.utils; import java.io.File; import java.io.FileInputStream; import jav ...

  7. Android 常见SD卡操作

    目录 Android 常见SD卡操作 Android 常见SD卡操作 参考 https://blog.csdn.net/mad1989/article/details/37568667. [0.] E ...

  8. Android获取SD卡路径及SDCard内存的方法

    这篇文章主要介绍了Android获取SD卡路径及SDCard内存的方法,较为详细的分析了Android针对SD卡操作所涉及的类及其具体函数功能,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了A ...

  9. android 向SD卡写入数据

    原文:android 向SD卡写入数据 1.代码: /** * 向sdcard中写入文件 * @param filename 文件名 * @param content 文件内容 */ public v ...

随机推荐

  1. [RxJS] What RxJS operators are

    We have covered the basics of what is Observable.create, and other creation functions. Now lets fina ...

  2. FastDFS配置说明(中英文)

    FastDFS配置说明 1)tracker.conf # is this config file disabled # false for enabled # true for disabled di ...

  3. Java web 文件下载

    /** * 下载文件 * @param msg */ public boolean printOutFile(String fileFullName,String fileName) { if (fi ...

  4. PowerDesigner15的安装和破解

    一.PowerDesigner15的安装 运行安装包,出现如下安装界面

  5. mysql 安装配置详解

    作为演示,是不可能完全模拟到生产环境的,因此不可能尽善尽美.由于是在virtualbox里面的centos6.5最小化安装版中安装配置mysql,因此前期的准备工作有很多,那么开始吧.添加一块硬盘,用 ...

  6. mysql复习笔记

    阅读目录 1.什么是SQL语句2.使用sql语句创建数据库和表3.创建数据表4.数据完整性约束5.四中基本字符类型说明6.SQL基本语句7.类型转换函数8.日期函数9.数学函数10.字符串函数11.联 ...

  7. 用CSS+Jquery实现一个漂浮的窗体

    一.项目需求: 实现一个用于网站主页面 从窗体左上角开始飘到右下角 之后又飘到右上角 十秒之后消失的效果. 二.需求分析: 首先 应当想要漂浮的内容放在一个容器内,也就是一个DIV,设计它的样式,不管 ...

  8. 浅谈inline-block

    一.区分block,inline,inline-block 1.block block元素会独占一行,多个block元素会各自新起一行.默认情况下,block元素宽度自动填满其父元素宽度. block ...

  9. VS2015 Cordova Ionic移动开发(四)

    一.布局 Ionic模板提供了一个侧边栏菜单示例项目和标签选项卡示例项目.本案例将两个布局进行结合,简单介绍下Ionic的布局.Ionic采用自定义标签和标准Html标签相结合.相对于全部使用div方 ...

  10. Gprinter Android SDK V2.0 使用说明

    佳博特约经销商,此店购买的打印机问题优先解决哟 https://shop107172033.taobao.com/index.htm?spm=2013.1.w5002-9520741823.2.V1p ...