提问人:BigBoss 提问时间:10/25/2023 更新时间:11/12/2023 访问量:48
将 Uri 转换为文件时缺少“文件”方案
Uri lacks 'file' scheme while converting Uri to File
问:
首先,我想澄清一下,这不是重复的。我已经浏览了 Stack Overflow 上具有类似主题但找不到解决方案的每个问题。我还浏览了文档,其中没有特别提到这个问题。
我正在尝试使用 Kotlin 将 Uri 转换为文件;但是,它会抛出一个错误,指出:.toFile()
java.lang.IllegalArgumentException: Uri lacks 'file' scheme: content://com.android.externalstorage.documents/document/primary%3Asample.txt
at androidx.core.net.UriKt.toFile(Uri.kt:43)
我通过文件选择器访问了该文件,并且还请求了 .虽然可以选择该文件,但它会抛出我上面提到的错误。用于访问该文件的代码如下所示:READ_EXTERNAL_STORAGE
val activityResultLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
val file = uri?.toFile()
if (file != null) {
Log.d("data file", file.readText())
}
}
我该如何解决这个问题?
谢谢。
答:
0赞
BigBoss
11/12/2023
#1
好吧,如果有人仍然遇到同样的问题,您可以尝试以下代码:
val activityResultLauncher =
rememberLauncherForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
val file = createTempFile()
uri?.let { context.contentResolver.openInputStream(it) }.use { input ->
file.outputStream().use { output ->
input?.copyTo(output)
}
}
Log.d("txt content", file.readText())
file.delete()
}
有关更多上下文,请参阅 https://stackoverflow.com/a/49221353/22091687
评论