Android Studio中Kotlin如何将assets文件夹内容复制到内外存储
可行实现方案(Kotlin版)
针对Android平台操作assets目录的需求,以下是可直接运行的实现方案,ApplicationContext.assets本身是官方提供的合法API,调用失败通常是上下文状态、路径配置、操作方式错误导致的,可对照以下方案调整:
1. 读取assets下文本文件
fun readTextFromAssets(context: Context, fileName: String): String? { return try { // use方法自动关闭流,避免内存泄漏 context.assets.open(fileName).use { inputStream -> inputStream.bufferedReader().use { reader -> reader.readText() } } } catch (e: IOException) { e.printStackTrace() return null } } // 调用示例:Activity内传入this,非页面类传入已初始化的applicationContext val configContent = readTextFromAssets(applicationContext, "config.json")
2. 读取assets下二进制文件(图片、音视频等)
fun loadBitmapFromAssets(context: Context, imagePath: String): Bitmap? { return try { context.assets.open(imagePath).use { inputStream -> BitmapFactory.decodeStream(inputStream) } } catch (e: IOException) { e.printStackTrace() return null } }
3. 遍历assets目录文件列表
fun listAssetsDir(context: Context, dirPath: String = ""): Array<String>? { return try { // 传入空字符串代表遍历assets根目录,传入子目录名遍历对应层级 context.assets.list(dirPath) } catch (e: IOException) { e.printStackTrace() return null } }
常见失败排查点
- 确认assets目录放在
src/main/路径下,和res目录同级,不要放错位置 - assets下文件名区分大小写,代码中传入的文件名要和实际文件完全一致
- assets目录是只读的,运行时无法直接修改其中的文件,如需修改要先把文件拷贝到应用内部存储再操作
- 不要在Application的
onCreate生命周期前调用assets操作,确保上下文已经初始化完成
内容的提问来源于stack exchange,提问作者Andrés Fernández
相关产品推荐
相关产品推荐

