获取文件夹名称而不是.mp3文件{Android}

时间:2015-06-10 10:49:59

标签: java android

public ArrayList<HashMap<String, String>> getPlaylist() {
    File home=Environment.getExternalStorageDirectory();
    if (home.listFiles(new FileExtensionFilter()).length > 0) {
        Log.d(Variables.DEBUGTAG, "Filter Files=-->" + home.listFiles().length);
        for (File file : home.listFiles(new FileExtensionFilter())) {
            HashMap<String, String> song = new HashMap<String, String>();
            song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4)));
            song.put("songPath", file.getPath());
            Log.d(Variables.DEBUGTAG, "Reading Files");

            // Adding each song to SongList
            songsList.add(song);

        }
    }
    // return songs list array
    Log.d(Variables.DEBUGTAG, "Sending files to system");

    return songsList;

}

class FileExtensionFilter implements FilenameFilter {
    @Override
    public boolean accept(File dir, String filename) {

        return (filename.endsWith(".mp3") || filename.endsWith(".MP3"));
    }
}

在获取播放列表时,它会返回文件夹或路径,而不是来自我的外部存储空间的文件...... !!! home.listFiles()数组包含模拟/ 0 / sdcard中的所有文件夹。 现在if块是假的,因为没有文件夹包含.mp3扩展名如果我注释if块而不使用FileExtensionFilter那么for block包含文件夹而不是任何文件....

1 个答案:

答案 0 :(得分:0)

您只是直接在外部存储(<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> )的根文件夹下查找文件,因此有没有Environment.getExternalStorageDirectory()文件。您应该递归搜索该目录的子文件夹,以便找到mp3文件。

致电mp3(不使用过滤器),并为每个目录致电home.listFiles()。为此,您必须在getPlayList()方法中添加File参数。每个递归调用都会返回一个getPlayList,其中包含其子文件夹树包含的所有ArrayList个文件的详细信息。

例如:

mp3

虽然只对当前目录中的所有文件进行一次迭代可能会更有效。对于子目录,您将进行递归调用,对于文件,您将检查文件名以确定它是否是应将其信息添加到列表中的mp3。