Android Studio中Java如何访问应用内assets目录子文件夹
Android 遍历assets子目录加载PNG图片实现方案
核心前提
assets目录属于APK打包时内置的只读资源,不会在R类中生成资源ID,也不存在可直接通过文件路径访问的实体文件(资源被打包在APK压缩包内),所有访问操作必须通过系统提供的AssetManagerAPI完成。
前置检查
先确认你的assets目录位置正确:标准存放路径为app/src/main/assets/,不要放在res目录下,也不要放在项目根目录。假设你存放PNG的嵌套子目录相对assets根目录的路径为my_custom_images/batch1(即assets下先建my_custom_images文件夹,里面再建batch1文件夹存png),后续代码直接使用这个相对路径即可。
完整Java实现代码
import android.content.res.AssetManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; // 在Activity/你需要加载资源的类中写以下逻辑 public void loadImagesFromAssets() { AssetManager assetManager = getAssets(); // 替换为你自己的assets下图片存放的相对路径,不要加assets/前缀 String imageFolderPath = "my_custom_images/batch1"; List<Bitmap> resultList = new ArrayList<>(); try { // 获取目标文件夹下所有文件名 String[] allFiles = assetManager.list(imageFolderPath); if (allFiles == null || allFiles.length == 0) { return; } for (String fileName : allFiles) { // 过滤非png格式文件,避免读取异常 if (!fileName.toLowerCase().endsWith(".png")) { continue; } // 拼接单个图片的assets相对路径 String singleImagePath = imageFolderPath + "/" + fileName; // 打开资源输入流 InputStream inputStream = assetManager.open(singleImagePath); // 解码为Bitmap对象 Bitmap targetBitmap = BitmapFactory.decodeStream(inputStream); // 基于Bitmap和文件名创建你的自定义业务对象即可 // 例:MyImageItem item = new MyImageItem(targetBitmap, fileName); resultList.add(targetBitmap); // 关闭流避免内存泄漏 inputStream.close(); } } catch (IOException e) { e.printStackTrace(); } }
常见踩坑说明
- 不要使用
file:///android_asset/开头的路径调用BitmapFactory解码,这个路径是专门给WebView加载本地资源用的,原生组件无法识别。 - 传入
assetManager.list()和assetManager.open()的路径不要加开头的/,也不要加assets/前缀,直接写相对于assets根目录的路径即可,支持多层嵌套文件夹,比如folder/sub1/sub2。 - 如果图片总大小较大,不要在主线程执行加载逻辑,会触发ANR,建议放到子线程处理,加载完成后再切回主线程更新UI。
- 如果加载时出现OOM问题,可以给
BitmapFactory配置Options参数,通过设置inSampleSize做图片采样压缩,根据实际显示尺寸降低加载的Bitmap内存占用。 - 如果在非Activity/Service等持有Context的组件中调用逻辑,需要传入Context对象,通过
context.getAssets()获取AssetManager实例,不要直接new AssetManager。
检索参考关键词
你之前搜不到有效内容大概率是关键词不对,后续查资料可以直接用以下关键词检索:
- Android AssetManager 遍历子文件夹文件
- Android 从assets目录读取图片 Java
- Android assets资源访问规范
内容的提问来源于stack exchange,提问作者André Chc
相关产品推荐
相关产品推荐

