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 楼答案
您只在外部存储器的根文件夹(
Environment.getExternalStorageDirectory()
)下直接查找文件,因此那里没有mp3
文件是有道理的。您应该递归地搜索该目录的子文件夹,以便找到mp3
文件调用
home.listFiles()
(不带过滤器),对于每个目录,调用getPlayList()
。为此,您必须将File
参数添加到getPlayList
方法中。每个递归调用将返回一个ArrayList
,其中包含其子文件夹树包含的所有mp3
文件的详细信息例如:
尽管对当前目录中的所有文件进行一次迭代可能会更有效。对于子目录,您将进行递归调用;对于文件,您将检查文件名,以确定是否是应将其信息添加到列表中的mp3