android - 获取文件列表的 Uri Path
问题描述
Android 11 / Api 30 假设我在 Android 设备上有一条到用户选择路径 (URI) 的路径,对于带有扩展名的文件,我将如何遍历该目录而不是可能更深的子目录.pref,以便以后可以加载这些文件。
我已经完成了在我自己的应用程序目录中使用路径的代码,但无法从共享/外部存储中的用户选择路径中找到我将如何做到这一点。
解决方案
假设我有一个用户选择路径 (URI) 的路径
AUri
不是文件系统路径。例如,https://stackoverflow.com/questions/68510202/uri-path-getting-a-file-list
是一个Uri
。
我将如何浏览该目录
我将假设您获得了Uri
via ACTION_OPEN_DOCUMENT_TREE
/ ActivityResultContracts.OpenDocumentTree
。
对于扩展名为 .pref 的文件,我将如何遍历该目录而不是其中可能更深的子目录,以便以后可以加载这些文件
文档提供者中的内容不需要具有文件扩展名,因此您的方法不适用于所有情况。但是,您可以将其包装Uri
在DocumentFile
using 中,fromTreeUri()
然后调用:listFiles()
DocumentFile
val docRoot: DocumentFile? = DocumentFile.fromTreeUri(this, uri)
val docPrefs: List<DocumentFile> = docRoot?.listFiles().orEmpty()
.filterNot { it.isDirectory }
.filter { it.name.orEmpty().endsWith(".pref") }
val docs: List<Uri> = docPrefs.map { it.uri }
在这里,docPrefs
是您的根目录的非目录子级列表,这些子级恰好具有以 . 结尾的显示名称.pref
。
以便以后可以加载这些文件
只有当你调用你takePersistableUriPermission()
从.Uri
ACTION_OPEN_DOCUMENT_TREE
推荐阅读
- r - 在闪亮的模块中使用 rhandsontable
- kubernetes - 如何探索 Kubernetes 文件夹?
- javascript - Google 图表颜色在实时项目中消失了,但在离线时效果很好
- javascript - JavaScript 循环是否正确?
- kubernetes - 如何将波士顿住房数据集摄取到 Kubernetes 中的 Cassandra?
- groovy - 如何在 groovy 的 try catch 块中尝试此代码?
- java - java.lang.IllegalStateException:无法创建引擎
- r - `get_map` 映射函数忽略 ggmap 包中的“source”参数
- python - 新安装的 pip 问题(或者 python 3.7 也有问题)
- gensim - gensim 保存负载模型弃用警告