为什么Android assets的images目录存在设计时未主动放入的文件?
异常文件来源说明
- 你看到的
clock_font.png、android-logo-shine.png等不属于你的文件,是Android系统框架层内置在assets/images路径下的公共资源。 - 系统提供的
AssetManager.list()方法的实现逻辑,会同时扫描应用自身assets目录和系统内置assets目录下的对应路径,把两个路径下的文件合并后返回结果,所以你查询images目录时会把系统内置的文件也列出来。 - 应用级别的
AssetManager没有直接读取系统内置assets资源的权限,所以遍历到这些系统文件调用assetManager.open()时就会抛出FileNotFoundException。 - 当你把自定义的assets子目录重命名为
test后,系统内置assets目录下不存在同名的test路径,list()方法就只会返回你自己存放的资源,问题自然解决。
可选规避方案
如果不想修改原有目录名,可以用两种方式处理:
- 遍历文件时捕获
FileNotFoundException,直接跳过读取失败的系统资源即可,不影响你自己的文件复制逻辑。 - 给自定义的assets子目录加专属前缀(比如命名为
app_images),避免和系统内置的assets目录重名,从根源上避免冲突。
内容的提问来源于stack exchange,提问作者Android4Ever
相关产品推荐
相关产品推荐

