【5年Android从零复盘系列之二十八】Android存储(3):assets文件详解
【5年Android从零复盘系列之二十八】Android存储(3):assets文件
【代码是最好的老师】
1.概述
- assets目录用于存储app的原始文件
- assets目录下所有文件不会被编译,会被原样打包进APK
- 使用特定工具类AssetManager读取Assets目录下文件
- 通常存放1-文本;2-不压缩图像;3-h5混合开发相关文件;4-音视频文件
- 不同于res/raw,assets下文件不能使用R.xx.id引用
方法 | 功能 |
---|---|
list(String path) | 获取path下的文件和文件夹名称 |
open(String fileName) | 打开文件,默认ACCESS_STREAMING模式 |
open(String fileName, int accessMode) |
指定打开模式。有 未指定:ACCESS_UNKNOWN 随机:ACCESS_RANDOM 顺序:ACCESS_STREAMING 缓存:ACCESS_BUFFER |
close() | 关闭回收资源 |
2.使用
加载文本.txt
加载图片
加载h5
2.1加载文本
private void readAssetTxt() {String result = "";try {InputStream is = getAssets().open("word.txt");int lenght = is.available();byte[] buffer = new byte[lenght];is.read(buffer);result = new String(buffer, "utf8");} catch (Exception e) {e.printStackTrace();}mTv.setText("word.txt:\n"+result);}
2.2加载图片
private void readAssetImg() {Bitmap bitmap = null;try {InputStream is = getAssets().open("img/ic_test.png");bitmap = BitmapFactory.decodeStream(is);} catch (Exception e) {e.printStackTrace();}if (bitmap != null){mImgShow.setImageBitmap(bitmap);}}
2.1加载html
private void readAssetH5() {String fileName = "file:///android_asset/index.html";mTv.setText(fileName);WebViewClient webViewClient = new WebViewClient();mWebView.setWebViewClient(webViewClient);mWebView.loadUrl(fileName);}
3.注意
- 尽量避免存放大文件,会直接影响apk包体积
- 建议混合开发情形下,才使用assets存放文件
- 需要直接引用的情形,也可使用/res/raw原始文件的方式
4.其他代码
activity.java
public class MainActivity extends AppCompatActivity {TextView mTv;ImageView mImgShow;WebView mWebView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);findViewById(R.id.btn_read_assets_txt).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {readAssetTxt();}});findViewById(R.id.btn_read_assets_img).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {readAssetImg();}});findViewById(R.id.btn_read_assets_h5).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {readAssetH5();}});mTv = findViewById(R.id.tv_content);mImgShow= findViewById(R.id.img_show);mWebView= findViewById(R.id.web_view);checkPermission();}private void readAssetH5() {String fileName = "file:///android_asset/index.html";mTv.setText(fileName);WebViewClient webViewClient = new WebViewClient();mWebView.setWebViewClient(webViewClient);mWebView.loadUrl(fileName);}private void readAssetImg() {Bitmap bitmap = null;try {InputStream is = getAssets().open("img/ic_test.png");bitmap = BitmapFactory.decodeStream(is);} catch (Exception e) {e.printStackTrace();}if (bitmap != null){mImgShow.setImageBitmap(bitmap);}}private void readAssetTxt() {String result = "";try {InputStream is = getAssets().open("word.txt");int lenght = is.available();byte[] buffer = new byte[lenght];is.read(buffer);result = new String(buffer, "utf8");} catch (Exception e) {e.printStackTrace();}mTv.setText("word.txt:\n"+result);}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" ><Buttonandroid:id="@+id/btn_read_assets_txt"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="read_assets_txt"/><Buttonandroid:id="@+id/btn_read_assets_img"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="read_assets_img"/><Buttonandroid:id="@+id/btn_read_assets_h5"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="read_assets_h5"/><TextViewandroid:id="@+id/tv_content"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="内容:"/><ImageViewandroid:id="@+id/img_show"android:layout_width="80dp"android:layout_height="80dp"/><WebViewandroid:id="@+id/web_view"android:layout_width="match_parent"android:layout_height="match_parent"/></LinearLayout></androidx.constraintlayout.widget.ConstraintLayout>
【5年Android从零复盘系列之二十八】Android存储(3):assets文件详解相关推荐
- 【5年Android从零复盘系列之二十】Android自定义View(15):Matrix详解(图文)【转载】
[转载]本文转载自麻花儿wt 的文章<android matrix 最全方法详解与进阶(完整篇)> [5年Android从零复盘系列之二十]Android自定义View(15):Matri ...
- 【5年Android从零复盘系列之十七】Android自定义View(12):手势绘制及GestureOverlayView事件详解(图文)
[5年Android从零复盘系列之十七]Android自定义View(12):手势绘制及GestureOverlayView事件浅析 1.基础 掌握View体系事件分发与处理,参考Android自定义 ...
- kafka maven 依赖_SpringBoot入门建站全系列(二十八)整合Kafka做日志监控
SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...
- SpringBoot入门建站全系列(二十八)整合Kafka做日志监控
SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...
- 强化学习系列文章(二十八):进化强化学习EvoRL的预实验
强化学习系列文章(二十八):进化强化学习EvoRL的预实验 最近在研究强化学习解决离散空间的组合优化问题时,接触到了很多进化算法,实际体验也是与RL算法不相上下.进化算法也常用于优化神经网络的参数,C ...
- 【5年Android从零复盘系列之六】Android自定义View(1):基础详解(图文)
1.基础一:坐标计算 1.1 Android窗口坐标系计算以屏幕左上角为原点, 向右为X轴正向,向下为Y轴正向 1.2 View坐标系 [注意获取的坐标是像素值,不是dp值] [注意获取的坐标是像素值 ...
- Android开发系列(二十八):使用SubMenu创建选项菜单
大部分手机上边都会有一个"MENU"键,在一个应用安装到手机上之后,能够通过"MENU"显示该应用关联的菜单. 可是,从Android 3.0開始,Androi ...
- 【Android Studio安装部署系列】二十三、Android studio查看Gradle版本号
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 File--Project Structure 单击Project 可以看到,当前项目的gradle版本号是4.4. 参考资料 An ...
- 【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 操作步骤 将光标放置我们所要生成get,set方法的实体类空白处--然后右键--选择Generate. 选择"Getter an ...
- Android audio切换设备通道流程(二十八)
Android audio切换设备通道流程 1.frameworks/base/media/java/android/media/AudioManager.java public void setMo ...
最新文章
- cad怎么查找未闭合_CAD无法填充的这四种方法肯定能解你燃眉之急
- Java基础day24
- try catch php 捕获,php try catch : 捕捉异常,抛出异常
- 学python需要记笔记吗_开始学python,一些笔记
- nsx很可爱的公众号 vSAN 文章合集
- mysql 5.7日志的种类_MySQL中的六种日志类型的介绍
- Flutter进阶—质感设计之列表项
- 使用Python在ArcGIS中编程杂谈
- [导入]Reporting Services 3: 报表模型项目
- ASP.NET修改文件夹名称
- Selenium 方法封装 一
- 第三章 准备工作 极值点
- java TIF 转 JPG
- 智课雅思词汇---十二、vent是什么意思
- 服务器搭建织梦cms系统,零基础使用织梦cms搭建自己的网站「织梦建站」
- (转)金蝶KIS迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系”...
- java 生成拼音_java工具-常用汉语转拼音库Pinyin4j 、tinypinyin、JPinyin
- open连接MySQL超时_mysql5 超时链接
- 共模电感的原理以及使用情况
- 看“华为人”如何管理时间
热门文章
- 计算机主机风扇安装方法,散热风扇怎么装 电脑机箱散热风扇安装图解教程 (全文)...
- mzy git学习,撤销修改(二)
- MacOS 10.15编译openjdk8u详细过程
- 软考信息系统项目管理师考试心得-备考
- 学习神经网络:搭建一个vgg-11模型在FashionMNIST训练
- 2(1) maximum number in a unimodal array
- PX4-固定翼的姿态控制
- 计算机系统时间显示不准确的原因,电脑时间总是不对原因 电脑时间总是不对三种解决方案...
- html制作带有尖角的边框,纯CSS3制作带尖角的气泡对话框实例特效代码
- 计算机网络专业术语大全