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 block 是 false,因为没有文件夹包含 .mp3 扩展名,如果我注释 if block 并且不使用 FileExtensionFilter 那么 for block 仅包含文件夹而不包含任何文件....
最佳答案
您只是在直接在外部存储的根文件夹 (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。
关于java - 获取文件夹名称而不是 .mp3 文件 {Android},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30754146/