簡體   English   中英

獲取文件夾名稱而不是.mp3文件{Android}

[英]Getting Folder names instead of .mp3 files {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塊為false,因為如果我注釋if塊並且不使用FileExtensionFilter,則沒有文件夾包含.mp3擴展名,則for塊包含文件夾中沒有任何文件。

您只在直接在外部存儲的根文件夾( 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM