Android开发中,File类中的listFiles方法只能获取到文件夹(目录)。

先上代码

  private static final File PATH = new File(Environment.getExternalStorageDirectory()+File.separator);
  ArrayList<String> data = new ArrayList<>();
   public void createlist(File PATH) {
        File[] files = PATH.listFiles();
        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
            for (File f : files) {
                if (!f.isDirectory()){
                    data.add(f.getName());
                }else {
                    Toast toast = Toast.makeText(this,"改文件为目录文件",Toast.LENGTH_LONG);
                    toast.show();
                }
            }
        }else {
            Toast toast = Toast.makeText(this,"SD卡挂载失败",Toast.LENGTH_SHORT);
            toast.show();
        }
    }

在这段代码中,经过判断语句if (!f.isDirectory())只会弹出else中的toast消息。也就是说我的files只能读到文件目录,而读不到其他类型的文件比如.txt,.doc之类。
我也试过打印一些关于files.length发现它只计算了文件夹的数量而没有计算其他类型的文件数量。

确定里面有其他的非文件夹的文件吗?

可以把文件夹依次递归调用 查找文件

那应该不会呀
用androidstudio自带的Device File Expore 看一看 里面到底有哪些文件呢?

不可能,你肯定存错目录了,这个方法会返回所有的文件,包括文件和文件夹。

建议再多确认你存放文件的目录

img


确实有TXT文档

去掉了判断是否为目录的语句,真机演示了一下,只能加载出目录文件的名字。

img

这是我根目录下的除了文本目录以外的其他文件,但是这些文件的名字都没有返回的。

img

看完都没有准确的答案 :)
我来答一下吧。
这是由于Android为了安全性做的限制,因此暂时的解决方式就是将APK的targetSdkVersion降低,比如改为28.