【5年Android从零复盘系列之二十八】Android存储(3):assets文件


【代码是最好的老师】

1.概述

  1. assets目录用于存储app的原始文件
  2. assets目录下所有文件不会被编译,会被原样打包进APK
  3. 使用特定工具类AssetManager读取Assets目录下文件
  4. 通常存放1-文本;2-不压缩图像;3-h5混合开发相关文件;4-音视频文件
  5. 不同于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.注意

  1. 尽量避免存放大文件,会直接影响apk包体积
  2. 建议混合开发情形下,才使用assets存放文件
  3. 需要直接引用的情形,也可使用/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文件详解相关推荐

  1. 【5年Android从零复盘系列之二十】Android自定义View(15):Matrix详解(图文)【转载】

    [转载]本文转载自麻花儿wt 的文章<android matrix 最全方法详解与进阶(完整篇)> [5年Android从零复盘系列之二十]Android自定义View(15):Matri ...

  2. 【5年Android从零复盘系列之十七】Android自定义View(12):手势绘制及GestureOverlayView事件详解(图文)

    [5年Android从零复盘系列之十七]Android自定义View(12):手势绘制及GestureOverlayView事件浅析 1.基础 掌握View体系事件分发与处理,参考Android自定义 ...

  3. kafka maven 依赖_SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  4. SpringBoot入门建站全系列(二十八)整合Kafka做日志监控

    SpringBoot入门建站全系列(二十八)整合Kafka做日志监控 一.概述 Apache Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端 ...

  5. 强化学习系列文章(二十八):进化强化学习EvoRL的预实验

    强化学习系列文章(二十八):进化强化学习EvoRL的预实验 最近在研究强化学习解决离散空间的组合优化问题时,接触到了很多进化算法,实际体验也是与RL算法不相上下.进化算法也常用于优化神经网络的参数,C ...

  6. 【5年Android从零复盘系列之六】Android自定义View(1):基础详解(图文)

    1.基础一:坐标计算 1.1 Android窗口坐标系计算以屏幕左上角为原点, 向右为X轴正向,向下为Y轴正向 1.2 View坐标系 [注意获取的坐标是像素值,不是dp值] [注意获取的坐标是像素值 ...

  7. Android开发系列(二十八):使用SubMenu创建选项菜单

    大部分手机上边都会有一个"MENU"键,在一个应用安装到手机上之后,能够通过"MENU"显示该应用关联的菜单. 可是,从Android 3.0開始,Androi ...

  8. 【Android Studio安装部署系列】二十三、Android studio查看Gradle版本号

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 File--Project Structure 单击Project 可以看到,当前项目的gradle版本号是4.4. 参考资料 An ...

  9. 【Android Studio安装部署系列】二十二、Android studio自动生成set、get方法

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 操作步骤 将光标放置我们所要生成get,set方法的实体类空白处--然后右键--选择Generate. 选择"Getter an ...

  10. Android audio切换设备通道流程(二十八)

    Android audio切换设备通道流程 1.frameworks/base/media/java/android/media/AudioManager.java public void setMo ...

最新文章

  1. cad怎么查找未闭合_CAD无法填充的这四种方法肯定能解你燃眉之急
  2. Java基础day24
  3. try catch php 捕获,php try catch : 捕捉异常,抛出异常
  4. 学python需要记笔记吗_开始学python,一些笔记
  5. nsx很可爱的公众号 vSAN 文章合集
  6. mysql 5.7日志的种类_MySQL中的六种日志类型的介绍
  7. Flutter进阶—质感设计之列表项
  8. 使用Python在ArcGIS中编程杂谈
  9. [导入]Reporting Services 3: 报表模型项目
  10. ASP.NET修改文件夹名称
  11. Selenium 方法封装 一
  12. 第三章 准备工作 极值点
  13. java TIF 转 JPG
  14. 智课雅思词汇---十二、vent是什么意思
  15. 服务器搭建织梦cms系统,零基础使用织梦cms搭建自己的网站「织梦建站」
  16. (转)金蝶KIS迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司联系”...
  17. java 生成拼音_java工具-常用汉语转拼音库Pinyin4j 、tinypinyin、JPinyin
  18. open连接MySQL超时_mysql5 超时链接
  19. 共模电感的原理以及使用情况
  20. 看“华为人”如何管理时间

热门文章

  1. 计算机主机风扇安装方法,散热风扇怎么装 电脑机箱散热风扇安装图解教程 (全文)...
  2. mzy git学习,撤销修改(二)
  3. MacOS 10.15编译openjdk8u详细过程
  4. 软考信息系统项目管理师考试心得-备考
  5. 学习神经网络:搭建一个vgg-11模型在FashionMNIST训练
  6. 2(1) maximum number in a unimodal array
  7. PX4-固定翼的姿态控制
  8. 计算机系统时间显示不准确的原因,电脑时间总是不对原因 电脑时间总是不对三种解决方案...
  9. html制作带有尖角的边框,纯CSS3制作带尖角的气泡对话框实例特效代码
  10. 计算机网络专业术语大全