AssetManager读取assets文件

Android2024年3月28日 pm6:43发布4个月前更新 3XCN.COM站长
0 0 0
广告也精彩
目录

前言

Android开发中,需要读取assets文件夹下的资源文件。assets文件夹是用于存放应用程序资源文件的目录,可以存放任意文件类型,比如图片、音频、字体等。

AssetManager是Android应用程序资源管理器,访问assets文件夹内容就需要它。

本文简单记录一下通过AssetManager获取assets中的文件。

正文

assets文件特性

  1. 单个文件需要小于1M

  2. 文件只能读,不能做写操作

  3. 自带隐藏的3个文件夹资源:images 、sounds 、webkit

  4. 不会被映射到R中,也就不能通过R.XXX.ID的方式访问

  5. 打包进apk时,不会进行压缩,可以有多级目录(raw文件夹也不压缩,不可以有多级目录,会被映射到R中)

  6. APK安装之后会放在"/data/app/**.apk"中,并不是一个目录,所以不能通过File操作。对数据的操作需要通过AssetsManger.open()方法得到流,然后就是对流的操作

读取assets文件列表

traverseAssets("","");

第二个""表示从assets根目录开始

/**
 * 遍历assets文件夹
 * @param tab  格式化显示占位符
 * @param path 在assets中的路径
 */
private void traverseAssets(String tab, String path) {
    AssetManager assetManager = getAssets();
    try {
        // 获取path目录下,全部的文件、文件夹
        String[] list = assetManager.list(path);
        if (list == null || list.length <= 0) {
            // 当前为文件时,或者当前目录下为空
            return;
        }
        for (String s : list) {
            Log.d(TAG, "traverseAssets : "+ (tab + s));
            String subPath;
            if ("".equals(path)) {
                // 如果当前是根目录
                subPath = s;
            } else {
                // 如果当前不是根目录
                subPath = path + "/" + s;
            }
            traverseAssets(tab.concat("---"), subPath);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

读取文本内容

其实就是对流的操作。

AssetManager assetManager = getAssets();
try {
    InputStream inputStream = assetManager.open("aaa.txt");
    BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
    StringBuilder stringBuilder = new StringBuilder();
    String line;
    while ((line = reader.readLine()) != null) {
        stringBuilder.append(line);
        stringBuilder.append("\n");
    }
    reader.close();
    inputStream.close();
    Log.d(TAG, "readText stringBuilder : "+ stringBuilder);
} catch (IOException e) {
    e.printStackTrace();
}

读取音频文件描述符

其实就是通过openFd()方法获取AssetFileDescriptor文件描述符,然后通过mediaPlayer.setDataSource(assetFileDescriptor)播放即可。

AssetManager assetManager = getAssets();
MediaPlayer mediaPlayer = new MediaPlayer();
try {
    AssetFileDescriptor assetFileDescriptor =  assetManager.openFd("kh.mp3");
    mediaPlayer.setDataSource(assetFileDescriptor);
    //或
    //mediaPlayer.setDataSource(assetFileDescriptor.getFileDescriptor(),
            assetFileDescriptor.getStartOffset(), assetFileDescriptor.getLength());
    //略
} catch (IOException e) {
    e.printStackTrace();
}

参考文章

  1. Android中assets各级目录的遍历及小结

  2. Android AssetManager 读取assets文件

版权声明 1、 本站名称: 91易搜
2、 本站网址: 91es.com3xcn.com
3、 本站文章: 部分来源于网络,仅供站长学习和参考,若侵权请留言
广告也精彩

相关文章

广告也精彩

暂无评论

评论审核已启用。您的评论可能需要一段时间后才能被显示。

暂无评论...

网站升级中

公告

近期网站升级中,可能存在一些bug。欢迎反馈 https://www.91es.com/we.html

本站域名

本站域名 : 91es.com3xcn.com。本站邮箱 : 站长邮箱 i@oorr.cn,通知邮箱we@oorr.cn ,如有更新,请看公告 。