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