一个MP3搜索类的实现(递归--又见递归)


    为什么说又见递归呢,因为刚毕业时候找工作,第一家公司的研发主管给我们出的面试题里面就有一道递归,最最经典的递归的例子--汉诺塔. 
    再说下又.这个又是因为我最近在搞一个android音乐播放器.其中有一项功能是搜索sd卡上所有的mp3文件.本来呢,使用content provider提供的方法也是可以做到的.不过因为自己对content provider不是很熟悉.所以采取了保守的做法----自己写代码实现. 
    具体思路是使用File的listFiles方法来获取目录下的所有文件:如果是目录的话,继续在这个目录下查找;如果是文件的话,则根据文件类型和扩展名来判断是否是mp3文件--如果是mp3文件,则将这个文件加入到列表中.最后我只要获取这个列表就行了. 
    怎么实现呢?很明显,这是个递归加循环的算法实现.上面已经把算法描述出来了.不过并没有使用伪代码.不过我也懒得使用伪代码了.直接上真实代码吧.

   1: package com.leipei.util;
   2:  
   3: import java.io.File;
   4: import java.util.ArrayList;
   5: import java.util.HashMap;
   6: import java.util.Map;
   7:  
   8: import android.util.Log;
   9:  
  10: public class Mp3Searcher {
  11:     private final String tag="Mp3Searcher";
  12:     private ArrayList<Map<String, String>> musicFileList;
  13:  
  14:     public Mp3Searcher() {
  15:         musicFileList = new ArrayList<Map<String, String>>();
  16:     }
  17:  
  18:     /**
  19:      * 此方法使用递归方式将搜索到的mp3文件信息添加到一个list中
  20:      * @param dir 从哪个路径下开始查找mp3
  21:      */
  22:     private void getMp3InDir(File dir) {
  23:         if (dir.isDirectory()) {
  24:             File[] files = dir.listFiles();
  25:             for (File f : files) {
  26:                 getMp3InDir(f);
  27:             }
  28:         } else {
  29:             if (dir.isFile() && dir.getName().endsWith(".mp3")) {
  30:                 HashMap<String, String> fileInfoMap = new HashMap<String, String>();
  31:                 fileInfoMap.put("fileName", dir.getName());
  32:                 fileInfoMap.put("filePosition", dir.getAbsolutePath());
  33:                 musicFileList.add(fileInfoMap);
  34:             }
  35:         }
  36:     }
  37:  
  38:     /**
  39:      * 
  40:      * @param dir 要查找mp3的目录,递归查找
  41:      * @return 返回一个list,这个list中包含了所有查找到的mp3文件,如果list为空,则表示没有搜索到mp3
  42:      */
  43:     public ArrayList<Map<String, String>> getAllMp3Files(File dir) {
  44:         Log.v(tag, "getAllMp3Files");
  45:         this.musicFileList.clear();
  46:         this.getMp3InDir(dir);
  47:         return this.musicFileList;
  48:     }
  49:  
  50:     /**
  51:      * 打印mp3搜索结果
  52:      */
  53:     public void printMusicFileList() {
  54:         if (this.musicFileList.isEmpty()) {
  55:             System.out.println("empty list");
  56:         } else {
  57:             for (Map<String, String> fileInfomap : this.musicFileList) {
  58:                 System.out.println("fileName: " + fileInfomap.get("fileName"));
  59:                 System.out.println("filePosition: "
  60:                         + fileInfomap.get("filePosition"));
  61:             }
  62:         }
  63:     }
  64:  
  65: }

分类:  android


本文转自leipei博客园博客,原文链接:http://www.cnblogs.com/leipei2352/archive/2011/11/03/2235142.html,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值