Android Assets子目录中如何区分文件与目录?
Android Assets目录文件/目录判断方案
你之前的方法行不通,核心原因是Assets中的资源是打包在APK内部的,并非设备文件系统中的真实路径,所以用File或Files类去判断必然返回false或抛出异常。
正确的做法是利用Android提供的AssetManager的list()方法来区分文件和目录:
- 当传入的路径是目录时,
list()会返回该目录下所有子项(文件/子目录)的名称数组 - 当传入的路径是文件时,
list()会返回空数组
实现代码示例(Kotlin)
下面是递归遍历assets/imports下所有文件的完整逻辑,包含文件/目录判断:
fun traverseImportsAssets(context: Context, currentPath: String = "imports") { val assetManager = context.assets try { val items = assetManager.list(currentPath) ?: return for (item in items) { val fullPath = if (currentPath.isEmpty()) item else "$currentPath/$item" // 判断当前项是文件还是目录 val subItems = assetManager.list(fullPath) if (subItems.isNullOrEmpty()) { // 是文件 println("找到文件:$fullPath") } else { // 是目录,递归遍历子目录 println("找到目录:$fullPath") traverseImportsAssets(context, fullPath) } } } catch (e: IOException) { e.printStackTrace() } }
调用方式
直接在需要的地方调用:
traverseImportsAssets(yourContext)
这个方案完全依赖Android的AssetManager API,能准确判断Assets中的文件和目录,同时实现递归遍历所有子项的需求。
内容的提问来源于stack exchange,提问作者shadox
相关产品推荐
相关产品推荐

