android add asset file
{
Android资源系统(resources system)可以用来打包应用所需的图片、XML文件以及其他非Java资源,这里来学习下另一种资源打包方式:assets。
resources资源可以存储声音文件,比如在res/raw目录可以保存xxx.wav文件,然后使用R.raw.xxx来获取它。然而,《Android编程权威指南》中的事例BeatBox项目,涉及到了20个多不同声音文件处理,若使用Android资源系统一个个处理,效率就会很低,这个时候,assets就派上用场了,assets可以被看作随应用打包的微型文件系统,支持任意层次的文件目录结构,因为这个优点,类似游戏这样需要加载大量图片和声音资源的应用通常都会使用它。下面来学习怎么读取assets资源。这里的Demo就不用书上同样的了,为了学习assets,就自己随意写了个Demo。
首先导入assets(创建assets目录,我用AS新建一个项目,貌似是没有自动生成assets文件夹的,因此,邮件单击app模块,New->Folder->Assets Folder)




private static final String TAG = "AssetDemoActivity";
private static final String EXAMPLE_FOLDER = "example";
private AssetManager mAssets;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_asset_demo);
mAssets = this.getAssets();
try {
String[] examples = mAssets.list(EXAMPLE_FOLDER);
Log.i(TAG, "ALL:" + examples.length);
for (String example: examples){
Log.i(TAG, "Name:" + example);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
打印结果:

assets目录中的所有文件都会随应用打包。访问assets需要用到AssetManager类,可以从Context中获取它,通常,在访问assets时,可以不用关心究竟使用哪个Context对象,实际开发中,所有Context中的AssetManager管理的都是同一套assets资源。AssetsManager.list(String)方法能列出指定目录中的所有文件名。
当然要得到assets中资源的内容,就要用到文件读取的技术了,首先要得到资源文件的路径喽,上述Demo得到路径的方式:
String assetPath = EXAMPLE_FOLDER + "/" + example;
InputStream assetData = mAssets.open(assetPath);
得到标准的InputStrem数据流,然后,就该怎么用就怎么用啦,有的API可能还会需要FileDescriptor。改调用AssetManager.openFd(String)方法就可以了。
深入理解:什么是non-assets
AssetManager类还有openNonAssetFd(...)这样的方法。Android有assets和resources两大资源系统。resources资源系统设计有良好的检索系机制,但它无法应付图形和声音文件这样的大文件。这些资源实际是保存在assets系统里的。在后台,Android就是使用openNonAsset方法来打开这些资源。
作者:夜远曦白
链接:https://www.jianshu.com/p/27032bba4c14
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律