有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java正在获取文件夹名,而不是。mp3文件{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"));
    }
}

获取播放列表时,它会返回文件夹或路径,而不是“我的外部存储帮助”中的文件。。。。!!! 家listFiles()数组包含模拟/0/SD卡中的所有文件夹。。 现在if块为false,因为没有文件夹包含。mp3扩展名如果我注释if块而不使用FileExtensionFilter,则for块仅包含文件夹而不包含任何文件


共 (1) 个答案

  1. # 1 楼答案

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

    调用home.listFiles()(不带过滤器),对于每个目录,调用getPlayList()。为此,您必须将File参数添加到getPlayList方法中。每个递归调用将返回一个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