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

标签 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() 数组包含 emulated/0/sdcard 中的所有文件夹。 现在 if block 是 false,因为没有文件夹包含 .mp3 扩展名,如果我注释 if block 并且不使用 FileExtensionFilter 那么 for block 仅包含文件夹而不包含任何文件....

最佳答案

您只是在直接在外部存储的根文件夹 (Environment.getExternalStorageDirectory()) 下查找文件,因此那里没有 mp3 文件是有道理的。您应该递归搜索该目录的子文件夹才能找到 mp3 文件。

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

例如:

public List<Map<String, String>> getPlaylist() {
    File home=Environment.getExternalStorageDirectory();
    return getPlaylist (home);
}

public List<Map<String, String>> getPlaylist(File root) {
    List<Map<String, String>> songsList = new ArrayList<>();
    if (root.listFiles(new FileExtensionFilter()).length > 0) {
        Log.d(Variables.DEBUGTAG, "Filter Files=-->" + home.listFiles().length);
        for (File file : root.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);

        }
    }
    for (File file : root.listFiles()) {
        if (file.isDirectory ()) {
            songsList.addAll(getPlaylist(file));
        }
    }

    return songsList;
}

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

关于java - 获取文件夹名称而不是 .mp3 文件 {Android},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30754146/

相关文章:

java - 线程同步 - 同步三个线程打印 012012012012..... 不起作用

java-如何指定我与源代码一起存储的文件的路径

java - 基本数据类型 准确性

android - 在切换到另一个动画之前等待动画完成?

java - 图标和 NavigationView 之间的左边距

java - 在构建字符串并将它们添加到 ArrayList 时出错

Java-eclipse-获取.exe文件

android - 如何在 Android 的 AWS Amplify 中指定存储路径。?

android - iptables 日志输出清理

android - GestureDetector在ListWheelScrollView中不起作用