前言
Android开发中,需要读取assets文件夹下的资源文件。assets文件夹是用于存放应用程序资源文件的目录,可以存放任意文件类型,比如图片、音频、字体等。
AssetManager是Android应用程序资源管理器,访问assets文件夹内容就需要它。
本文简单记录一下通过AssetManager获取assets中的文件。
正文
assets文件特性
-
单个文件需要小于1M
-
文件只能读,不能做写操作
-
自带隐藏的3个文件夹资源:images 、sounds 、webkit
-
不会被映射到R中,也就不能通过R.XXX.ID的方式访问
-
打包进apk时,不会进行压缩,可以有多级目录(raw文件夹也不压缩,不可以有多级目录,会被映射到R中)
-
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(); }
参考文章
-
《》
-
《
暂无评论...
随机推荐
[摘]音视频学习系列第(一)篇---基础概念
shui知道最在学习这个,这个博主总结得不错,因此摘抄于此,以方便自己查阅。可访问改博主sofarsogoo_932d的一系列文章《音视频学习系列》,感谢他的分享。什么是音/视频音频声音的集合视频图片的集合,当一段连续的图片不断的出现在人眼前(至少要求1秒24帧,即一秒内连续出...
Android内存泄露检测之LeakCanary的简单使用
前言使用MAT来分析内存问题,有一些门槛,会有一些难度,并且效率也不是很高,对于一个内存泄漏问题,可能要进行多次排查和对比才能找到问题原因。为了能够简单迅速的发现内存泄漏,Square公司基于MAT开源了LeakCanary。PS:有不同版本的leakcanary出现不同的问题,因此2021...
Android的5个进程等级
一、进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体,是一个“执行中的程序”。不只是程序的代码,还包括当前的活动。二、线程:线程是进程的一个实体,是CPU调度和...
[摘]BAT脚本如何自动执行 adb shell 以后的命令
需求说明BAT脚本中执行adb shell 命令后,需要获取其返回的结果。adb shell ps | grep com.125la.test我想返回打印的值参考代码@echo offecho su > temp.txtecho 其它命令 >> temp.txt...
梁实秋:鸟
我爱鸟。从前我常见提笼架鸟的人,清早在街上溜达(现在这样有闲的人少了)。我感觉兴味的不是那人的悠闲,却是那鸟的苦闷。胳膊上架着的鹰,有时头上蒙着一块皮子,羽翮不整的蜷伏着不动,哪里有半点邻视昂藏的神气?笼子里的鸟更不用说,常年的关在栅栏里,饮啄倒是方便,冬天还有遮风的棉罩,十分的“优待”,但是如果...
Android focus获取状态简介
前言简单记录一下Android中View的focus状态获取。正文隐藏内容!付费阅读后才能查看!¥1 ¥3多个隐藏块只需支付一次付费阅读参考文章《Android中走马灯(或跑马灯)以及相关问题总结》