【问题标题】:Retrieve all video files from all directories of SD card从 SD 卡的所有目录中检索所有视频文件
【发布时间】:2014-09-07 11:29:46
【问题描述】:

我正在制作一个媒体播放器。我想获取 sd 卡中的所有视频。

如果视频直接在sd卡的顶层目录下,就很简单了。但是像

这样的嵌套目录结构中存在的视频文件呢?

目录->目录->目录->file.mp4.

如何在嵌套目录结构中搜索文件?

【问题讨论】:

    标签: java android file android-sdcard


    【解决方案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;
    }
    

    【讨论】:

    • 原谅代码缩进,因为我在移动设备上。
    • 如果文件在一个文件夹中。如果文件在多个文件夹中的文件夹中怎么办?
    • 如果找到目录,则递归调用函数 getfile()。因此,如果您使用参数作为 sdcard 的路径调用它,这将适用于所有文件和文件夹,例如:listfile("/mnt/sdcard")
    【解决方案2】:

    使用 Apache FileUtils:

    import org.apache.commons.io.FileUtils;
    
    String path = ...;
    String[] extensions = {"mp4", "mov", ...};
    Collection<File> allMovies = FileUtils.listFiles(new File(path), extensions, true);
    

    【讨论】:

    【解决方案3】:

    我发布这个,也许它会帮助有需要的人。 正如@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());
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      相关资源
      最近更新 更多