如何从资产中获取File对象?

How to get File object from assets?

提问人:tycoon 提问时间:7/24/2022 更新时间:7/24/2022 访问量:330

问:

我的 assets 文件夹中有一个 markdown 文件。我正在使用一个 markdown 查看器,它将 Object 作为参数来解析屏幕上的文件。java.io.File

但是我不知道如何从assets文件夹中的文件中获取文件对象。 有没有办法做到这一点。我尝试了URI方式,但失败了。

这是我的代码片段,可能会有所帮助

val markDown = File("file:///asset/GalacticAstronomy.md")
        if (markDown.exists()) {
            Toast.makeText(baseContext, "File exist", Toast.LENGTH_SHORT).show()
        } else Toast
            .makeText(baseContext, "File doesn't exist", Toast.LENGTH_SHORT).show()
        setContent {
            MaterialTheme {
                MarkDown(
                    file = markDown,
                    modifier = Modifier.fillMaxSize()
                )
            }
        }

我没有尝试读取文件,因此使用assets.open(“file”)是行不通的

安卓 Kotlin

评论


答:

2赞 CommonsWare 7/24/2022 #1

但是我不知道如何从assets文件夹中的文件中获取文件对象

这是不可能的,因为它不是文件。

我没有尝试读取文件,因此使用assets.open(“file”)是行不通的

你别无选择。也:

  • 使用更好的 Markdown 库,该库接受 或InputStream
  • 自行将资源复制到文件中(例如,在 中 ),然后将生成的文件与现有库一起使用getCacheDir()assets.open()

评论

0赞 tycoon 7/24/2022
我不明白你的第二点。我对 Android 开发非常陌生,所以多一点解释会有所帮助,或者是我可以寻找特定内容的资源
0赞 CommonsWare 7/24/2022
@tycoon:将数据从流复制到文件应该在几乎所有关于 Java 编程的书籍中介绍。我在这本免费书籍的这一章中介绍了 Android 文件系统访问。在该章的这一部分中,我将具体演示如何将资源复制到文件中。
0赞 tycoon 7/24/2022
哦,对不起,我知道如何从流中复制数据,我以为你想说一些不同的话。再次感谢您的帮助。