• 一个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: }

  • 相关阅读:
    INFORMIX体系效能改善第一步
    Ubuntu判袂率不正常的一种复杂治理措施
    ubuntu8.04分区分配方案
    计算机启动更快的十五招
    理顺 JavaScript (13) 对象及 json
    获取指定地址的 JPG 图片 回复 "bangrj" 的问题
    理顺 JavaScript (14) constructor 与 instanceof
    理顺 JavaScript (9) Date 类
    用 API 提取、写入指定网站的 Cookie 回复 "bangrj" 的问题
    理顺 JavaScript (10) Math 类
  • 原文地址:https://www.cnblogs.com/leipei2352/p/2235142.html
Copyright © 2020-2023  润新知