[英]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.