You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么调用listFiles()方法仅返回文件夹不返回文件

解决方案

1. 适配分区存储权限

该问题绝大多数场景由安卓分区存储权限限制导致:

  • API 级别 ≤ 32:在AndroidManifest.xml中声明READ_EXTERNAL_STORAGE权限,同时在代码中运行时动态申请该权限
  • API 级别 ≥ 33:根据要读取的文件类型声明对应权限:读取图片用READ_MEDIA_IMAGES、读取视频用READ_MEDIA_VIDEO、读取音频用READ_MEDIA_AUDIO。如果需要读取Download目录下的非媒体文件(如APK、PDF、压缩包等),无法通过普通权限获取访问权限,需调用系统存储访问框架(SAF)实现
  • 注意:targetSdkVersion ≥ 29时在清单文件配置android:requestLegacyExternalStorage="true"仅能在安卓10设备上临时绕过分区存储限制,安卓11及以上系统会完全忽略该配置

2. 修正公共目录获取方式

不要硬编码/sdcard/Download路径,不同厂商ROM的公共目录路径可能存在定制化差异,应使用官方API获取公共Download目录的正确路径:

File downloadDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File[] list = downloadDir.listFiles();

if(list!=null) {
    Log.e("exists",downloadDir.exists()+"");
    Log.e("isDirectory",downloadDir.isDirectory()+"");
    Log.e("getPath",downloadDir.getPath() +"");
    Log.e("length",list.length+"");

    for (File fil : list) {
        Log.e("name", fil.getName());
    }
}

3. 检查文件属性限制

如果目标文件是其他应用创建的私有文件、或者被设置了隐藏/系统文件属性,没有对应访问权限的情况下也会被listFiles()方法自动过滤不返回。

内容的提问来源于stack exchange,提问作者Pavel Andorel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:15:03