列出单个列表中所有文件夹中的所有文件

Kan*_*ika 53 android android-file

嗨,我正在寻找列出来自root/Android设备的所有文件的解决方案.

假设根目录中有3个文件夹,但我想在一个列表中显示所有这些文件夹中的所有文件.

现在如果我正在使用

       File f=new File("/sdcard");
Run Code Online (Sandbox Code Playgroud)

然后它将仅列出sdcard文件夹中的所有文件.如果我将使用

       File f=new File("/download");
Run Code Online (Sandbox Code Playgroud)

然后它将仅列出下载文件夹中的所有文件..如果我将使用

       File f=new File("/");
Run Code Online (Sandbox Code Playgroud)

然后它将仅列出root direcoty文件...而不是/ sdcard或/ download中的文件.

那么我应该遵循哪些步骤来列出所有带有过滤器的文件,以便仅列出root中所有文件夹中的.csv文件.

谢谢..

Vya*_*kin 131

试试这个:

 .....
 List<File> files = getListFiles(new File("YOUR ROOT")); 
 ....
 private List<File> getListFiles(File parentDir) {
    ArrayList<File> inFiles = new ArrayList<File>();
    File[] files = parentDir.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            inFiles.addAll(getListFiles(file));
        } else {
            if(file.getName().endsWith(".csv")){
                inFiles.add(file);
            }
        }
    }
    return inFiles;
}
Run Code Online (Sandbox Code Playgroud)

或没有递归的变体:

private List<File> getListFiles2(File parentDir) {
    List<File> inFiles = new ArrayList<>();
    Queue<File> files = new LinkedList<>();
    files.addAll(Arrays.asList(parentDir.listFiles()));
    while (!files.isEmpty()) {
        File file = files.remove();
        if (file.isDirectory()) {
            files.addAll(Arrays.asList(file.listFiles()));
        } else if (file.getName().endsWith(".csv")) {
            inFiles.add(file);
        }
    }
    return inFiles;
}
Run Code Online (Sandbox Code Playgroud)

  • 您好,Vyacheslav Shilkin,您的代码对我有用,但输出是在延迟几秒(2-3 秒)后才出现的。你能建议一些东西让它更快一点吗? (2认同)