我正在制作媒体播放器。我想让所有视频都出现在 SD卡中。
如果视频直接在 SD卡的顶级目录中提供,则很简单。但是像
这样的嵌套目录结构中存在视频文件呢目录 - >目录 - >目录 - > file.mp4
如何在嵌套目录结构中搜索文件?
答案 0 :(得分:1)
您可以创建一个列表,该列表可以存储SD卡上存在的所有视频文件的位置。运行一个循环,它将访问每个文件夹并更新此数组(如果给定文件格式(在您的情况下是视频文件或.mp4))并将其添加到数组。您可以将此列表存储到持久存储中,以便下次启动应用程序时可以阅读它。
以下示例代码可以帮助您列出sdcard中的所有文件
public ArrayList<File> getfile(File dir) {
File listFile[] = dir.listFiles();
if (listFile != null && listFile.length > 0) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
fileList.add(listFile[i]);
getfile(listFile[i]);
} else {
if (listFile[i].getName().endsWith(".png")
|| listFile[i].getName().endsWith(".jpg")
|| listFile[i].getName().endsWith(".jpeg")
|| listFile[i].getName().endsWith(".gif")) {
fileList.add(listFile[i]);
}
}
}
}
return fileList;
}
答案 1 :(得分:1)
使用Apache FileUtils:
import org.apache.commons.io.FileUtils;
String path = ...;
String[] extensions = {"mp4", "mov", ...};
Collection<File> allMovies = FileUtils.listFiles(new File(path), extensions, true);
答案 2 :(得分:0)
在发布此内容时,也许会对需要帮助的人有所帮助。 正如@Jaqen H'ghar所说的...我只是简化代码以添加您要显示的扩展名列表。
File filePath = new File(Environment.getExternalStorageDirectory().getAbsolutePath());
List<String> fileList = new ArrayList<>();
String[] extensions = {"apk","mp3","mp4","or what ever extension u want"};
Collection<File> allMovies = FileUtils.listFiles(new File(String.valueOf(filePath)), extensions, true);
for (File file: allMovies) {
fileList.add(file.getName());
}