复制assets目录下的文件到内部存储中报FileNotFoundException

今天在项目中需要添加几张默认图片到应用目录下,
由于之前没有做过相关的操作,遂先百度了一波写法,复制粘贴一把抓,运行,然后报错,
报错的代码如下

val assetsManager = assets.list("img")
        assetsManager?.forEach {
            try {
                val inputStream = assets.open(it)
                
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }

问题就出在assets.open(it)
当代码运行到这里就会报错

java.io.FileNotFoundException: default_four.png
  at android.content.res.AssetManager.nativeOpenAsset(Native Method)
  at android.content.res.AssetManager.open(AssetManager.java:856)
  at android.content.res.AssetManager.open(AssetManager.java:833)

本着偷懒的思想,带着错误百度百度,结果愣是没找到相应的解决办法,搜索出来的基本是一样的,然而跟我的搭不上边,然后在群里也问了问,其中一个巨佬跟我说读文件的全名称,一时间没意识到什么意思,然后又去源码中看了看对fileName的解释:The name of the asset to open. This name can be hierarchical,这才意识到我读取的文件实在assets目录下的img目录里面,因此要对文件进行open操作,需要带上相应文件的路径,而不是只拿获取到的文件名来操作
,因此正确的写法如下

val assetsManager = assets.list("img")
        assetsManager?.forEach {
            try {
                //打开相应的文件需要带上所属的路径
                val inputStream = assets.open("img/$it")
               //对流进行其他操作
            } catch (e: Exception) {
                e.printStackTrace()
            }
        }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容