Android获取本机各种类型文件的方法

  

<强>介绍

  

本篇介绍Android获取本机各种类型文件的方法,已经封装成工具类,末尾有源码下载地址。

  

<>强提示

  

获取音乐,视频,图片,文档等文件是需要有读取SD卡的权限的,如果是6.0以下的系统,则直接在清单文件中声明SD卡读取权限即可,如果是6.0或以上,则需要动态申请权限。

  

<强>文件管理的使用

  

文件管理是封装好的用于获取本机各类文件的工具类,使用方式如:文件管理。getInstance(上下文语境).getMusics(),使用的是单例模式创建:

        私有静态文件管理mInstance;   私有静态上下文mContext;   公共静态ContentResolver mContentResolver;   私有静态对象mLock=新对象();      公共静态文件管理getInstance(上下文语境){   如果(mInstance==null) {   同步(mLock) {   如果(mInstance==null) {   mInstance=new文件管理();   mContext=上下文;   mContentResolver=context.getContentResolver ();   }   }   }   返回mInstance;   }      之前      

获取音乐列表

     /* *   *获取本机音乐列表   * @return   */私有静态ListgetMusics () {   ArrayList音乐=new ArrayList<在();   光标c=零;   尝试{   c=mContentResolver.query (MediaStore.Audio.Media。EXTERNAL_CONTENT_URI,空,空,空,   MediaStore.Audio.Media.DEFAULT_SORT_ORDER);      而(c.moveToNext ()) {   字符串路径=c.getString (c.getColumnIndexOrThrow (MediaStore.Audio.Media.DATA));//路径      如果(FileUtils.isExists(路径)){   继续;   }      字符串名称=c.getString (c.getColumnIndexOrThrow (MediaStore.Audio.Media.DISPLAY_NAME));//歌曲名   字符串专辑=c.getString (c.getColumnIndexOrThrow (MediaStore.Audio.Media.ALBUM));//专辑   字符串艺术家=c.getString (c.getColumnIndexOrThrow (MediaStore.Audio.Media.ARTIST));//作者   长尺寸=c.getLong (c.getColumnIndexOrThrow (MediaStore.Audio.Media.SIZE));//大小   int时间=c.getInt (c.getColumnIndexOrThrow (MediaStore.Audio.Media.DURATION));//时长   int时间=c.getInt (c.getColumnIndexOrThrow (MediaStore.Audio.Media._ID));//歌曲的id//int albumId=c.getInt (c.getColumnIndexOrThrow (MediaStore.Audio.Media.ALBUM_ID));      音乐音乐=new(名称、路径、专辑名、艺人、大小、持续时间);   musics.add(音乐);   }      }捕捉(异常e) {   e.printStackTrace ();   最后}{   如果(c !=null) {   c.close ();   }   }   返回音乐;   }   之前      

FileUtils中判断文件是否存在的方法isExists (String路径),代码为:

     /* *   *判断文件是否存在   * @param路径文件的路径   * @return   */公共静态布尔isExists (String路径){   文件文件=新文件(路径);   返回file.exists ();   }   之前      

音乐的bean类音乐代码为:

        公共类音乐实现Comparable{/* *歌曲名*/私人字符串名称;/* *路径*/私人字符串路径;/* *所属专辑*/私人字符串专辑;/* *艺术家(作者)*/私人字符串艺术家;/* *文件大小*/私人长尺寸;/* *时长*/私人int持续时间;/* *歌曲名的拼音,用于字母排序*/私人字符串拼音;      公共音乐专辑字符串名称,路径的字符串,字符串,字符串艺术家,长尺寸,int持续时间){   this.name=名称;   这一点。路径=路径;   这一点。相册=专辑;   这一点。艺术家=艺术家;   这一点。大?大小;   这一点。时间=时间;   拼音=PinyinUtils.getPinyin(名称);   }      …//此处省略setter和getter方法   }   之前      

PinyinUtils根据名字获取拼音,主要是用于音乐列表a - z的排序,需要依赖pinyin4j。jar,获取拼音的方法getPinyin(字符串名称)代码为:

        公共静态字符串getPinyin (String str) {//设置拼音结果的格式   HanyuPinyinOutputFormat格式=new HanyuPinyinOutputFormat ();   format.setCaseType (HanyuPinyinCaseType.UPPERCASE);//设置为大写形式   format.setToneType (HanyuPinyinToneType.WITHOUT_TONE);//不用加入声调      StringBuilder某人=new StringBuilder ();      char [] charArray=str.toCharArray ();      for (int i=0;我& lt;charArray.length;我+ +){   字符c=charArray[我];      如果(Character.isWhitespace (c)){//如果是空格则跳过   继续;   }      如果(isHanZi (c)){//如果是汉字   字符串s=" ";   尝试{//toHanyuPinyinStringArray返回一个字符串数组是因为该汉字可能是多音字,此处只取第一个结果   s=PinyinHelper。toHanyuPinyinStringArray (c,格式)[0];   sb.append(年代);   }捕捉(BadHanyuPinyinOutputFormatCombination e) {   e.printStackTrace ();   sb.append(年代);   }      其他}{//不是汉字   如果(i==0) {   如果(发明(c)){//第一个属于字母,则返回该字母   返回String.valueOf (c) .toUpperCase (Locale.ENGLISH);   }   返回“#”;//不是的话返回#号   }   }   }   返回sb.toString ();   }      

Android获取本机各种类型文件的方法