You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 21:47:16