复制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()
            }
        }

你可能感兴趣的:(复制assets目录下的文件到内部存储中报FileNotFoundException)