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()数组包含模拟/ 0 / sdcard中的所有文件夹。 现在if块是假的,因为没有文件夹包含.mp3扩展名如果我注释if块而不使用FileExtensionFilter那么for block包含文件夹而不是任何文件....
答案 0 :(得分:0)
您只是直接在外部存储(<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
)的根文件夹下查找文件,因此有没有Environment.getExternalStorageDirectory()
文件。您应该递归搜索该目录的子文件夹,以便找到mp3
文件。
致电mp3
(不使用过滤器),并为每个目录致电home.listFiles()
。为此,您必须在getPlayList()
方法中添加File
参数。每个递归调用都会返回一个getPlayList
,其中包含其子文件夹树包含的所有ArrayList
个文件的详细信息。
例如:
mp3
虽然只对当前目录中的所有文件进行一次迭代可能会更有效。对于子目录,您将进行递归调用,对于文件,您将检查文件名以确定它是否是应将其信息添加到列表中的mp3。