前言
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(); }
参考文章
-
《》
-
《
暂无评论...
随机推荐
记录Ubuntu更新命令
前言简单的记录一下Ubuntu更新命令,方便自己查阅。流水账一篇。正文更新系统sudo apt update && sudo apt upgrade -y搜索包apt-cache search package获取包的相关信息apt-cache show packa...
王小波:写给新的一年
我们读书、写作——1995年就这样过去了。这样提到过去的一年,带点感慨的语调,感叹生活的平淡。过去我们的生活可不是这样平淡。在我们年轻时,每一年的经历都能写成一本书,后来只能写成小册子,再后来变成了薄薄的几页纸。现在就是这样一句话:读书、写作。一方面是因为我们远离了动荡的年代,另一方面,我们也喜欢平...
刘半农:叫我如何不想她
天上飘着些微云,地上吹着些微风。啊!微风吹动了我头发,教我如何不想她? 月光恋爱着海洋,海洋恋爱着月光。啊!这般蜜也似的银夜,教我如何不想她? 水面落花慢慢流,水底鱼儿慢慢游。啊!燕子你说些什么话?教我如何不想她? 枯树在冷风里摇。...
判断Service和Activity的存在
备忘在这,防止下次需要。1、判断服务是否在运行 /** * app service running */ public static boolean appServiceIsRunning(String classname) { if (null == classname...
BiuImageView的使用
前言BiuImageView是之前山寨PhotoView 《自定义View:山寨PhotoView》基础上重构的一个新版本《自定义View:BiuImageView》,也优化了很多。今天就简单的用一下BiuImageView。正文什么是BiuImageView我们知道有个开源的Basef...
Launcher2源码之壁纸设置
上回我们简单介绍了Launcher中的布局,这次我们看看如何设置壁纸。在Launcher界面,长按空白处,就会弹出如上图的壁纸设置对话框。直接上代码Launcher.java1. onCreate() 加载布局和初始化控件 @Override protected v...