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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:18:05