【问题标题】:Android File.listFiles() returns only subdirectoriesAndroid File.listFiles() 仅返回子目录
【发布时间】:2021-03-26 11:53:18
【问题描述】:

我正在尝试获取目录中的所有文件和子目录并显示它们的名称。这是我使用的代码:

File internalStorageDir = new File(Environment.getExternalStorageDirectory().getPath());
File[] files = internalStorageDir.listFiles();
ArrayList<String> fileNames = new ArrayList<>();
for(int i=0; i< files.length; i++){fileNames.add(files[i].getName());}

指定目录(Environment.getExternalStorageDirectory())包含文件和子目录,而listFiles()只返回子目录。这段代码有什么问题?已授予读取外部存储的权限。

【问题讨论】:

  • 您能打印出您正在访问的特定路径并与同一路径上的 ls 输出进​​行比较吗?
  • 正在测试哪个版本的 Android?顺便说一句,您可以通过将 new File(Environment.getExternalStorageDirectory().getPath()) 替换为 new Environment.getExternalStorageDirectory() 来简化此代码。
  • 我尝试在搭载 Android 10 的 AVD 和搭载 Android 11 的真实设备上进行测试。结果是一样的。
  • 外部存储的根目录只包含公共目录是很正常的。
  • File internalStorageDir = new File(Environment.getExternalStorageDirectory().getPath()); 你可以简化这段代码:File internalStorageDir = Environment.getExternalStorageDirectory(); ;-)

标签: java android file


【解决方案1】:

我的错,我错过了一些东西。在 Android 11 中,您只能访问媒体文件。就我而言,外部存储中的文件不是媒体文件,因此没有显示。但是在将目标 api 更改为 29 (Android 10) 后一切正常。感谢所有试图提供帮助的人!

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
相关资源
最近更新 更多