首页 > 解决方案 > 获取文件列表的 Uri Path

问题描述

Android 11 / Api 30 假设我在 Android 设备上有一条到用户选择路径 (URI) 的路径,对于带有扩展名的文件,我将如何遍历该目录而不是可能更深的子目录.pref,以便以后可以加载这些文件。

我已经完成了在我自己的应用程序目录中使用路径的代码,但无法从共享/外部存储中的用户选择路径中找到我将如何做到这一点。

标签: androidkotlin

解决方案


假设我有一个用户选择路径 (URI) 的路径

AUri不是文件系统路径。例如,https://stackoverflow.com/questions/68510202/uri-path-getting-a-file-list是一个Uri

我将如何浏览该目录

我将假设您获得了Urivia ACTION_OPEN_DOCUMENT_TREE/ ActivityResultContracts.OpenDocumentTree

对于扩展名为 .pref 的文件,我将如何遍历该目录而不是其中可能更深的子目录,以便以后可以加载这些文件

文档提供者中的内容不需要具有文件扩展名,因此您的方法不适用于所有情况。但是,您可以将其包装UriDocumentFileusing 中,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()从.UriACTION_OPEN_DOCUMENT_TREE


推荐阅读