列出设备上具有特定扩展名的所有文件

时间:2014-03-14 13:17:23

标签: android android-file android-external-storage

我想在设备上找到所有文件,在我的例子中是pdf' s。现在我写了这段代码:

File images = Environment.getExternalStorageDirectory();
        mImagelist = images.listFiles(new FilenameFilter(){
            public boolean accept(File dir, String name)
            {
                return ((name.endsWith(".pdf")));
            }
        });

此代码只找到一个pdf
/storage/emulated/0/HTC_One_WWE_User_Guide.pdf。我的下载文件夹中还有其他几个pdf。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

感谢Juan。

public void recursiveScan(File f) {
    File[] file = f.listFiles();
    for (File ff : file) {
        if (ff.isDirectory()) recursiveScan(f);
        if (ff.isFile() && ff.getPath().endsWith(".pdf")) {
            Log.d("Debug", ff.toString());
        }
    }
}

您只需要从搜索位置提供File var。

答案 1 :(得分:1)

从外部存储目录获取文件列表,并迭代所述列表。这应该允许您查看扩展名是否与pdf匹配,然后添加到列表或您想要做的任何事情:

File[] file = Environment.getExternalStorageDirectory().listFiles(); 
for (File f : file){
   if (f.isFile() && f.getpath().endswith(".pdf")) {
      //Add to your list 
   }
}

据我所知,这不会进入内部目录,所以你需要将它包装在一个方法中并执行类似if f.isDirectory()再次调用该方法来遍历文件夹的内容。

public void recursiveScan(File f) {
    File[] file = f.listFiles(); 
    for (File f : file){
        if (f.isDirectory()) recursiveScan(f);
        if (f.isFile() && f.getpath().endswith(".pdf")) {
            //Add to your list 
        }
    }
}

其中称为recursiveScan(Environment.getExternalStorageDirectory());

<强>声明: 我没有对它进行测试,所以有些东西可能会关闭,但它应该让你大致了解如何去做。