一个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,如需转载请自行联系原作者