Android assets文件使用

1、在main文件夹下创建assets文件夹

2、assets文件夹下可创建image文件夹,text文件夹,image文件夹下存放jpg或png图片。text文件夹下存放.txt文本

3、读取assets文件内容:

entity类:

public class Book {private static final String TAG = "Book";private String mBookTitle;private Bitmap mBookCover;//格式化文本,将文本以段落为单位保存private List<String> mParagraphList;//目录集合(卷/章/回/集等)private List<String> mBookContents;//目录对应的在段落集合中的索引private List<Integer> mContentParaIndexs;//空两格private String mSpace = "\t\t\t\t\t\t";public Book(String bookTitle, Bitmap bookCover, String fullText) {mParagraphList = new ArrayList<>();mBookContents = new ArrayList<>();mContentParaIndexs=new ArrayList<>();mBookTitle = bookTitle;mBookCover = bookCover;formatText(fullText);findContents(mParagraphList);}//格式化文本,将文本以段落为单位保存private void formatText(String text) {boolean isFirstParas = true;String paragraph = "";//按段落切分文本String[] paragraphs = text.split("\\s{2,}");//格式化段落for (int i = 0; i < paragraphs.length; i++) {if (paragraphs[i].isEmpty()) {continue;}if (isFirstParas) {paragraph = mSpace + paragraphs[i];isFirstParas = false;} else {paragraph = "\n" + mSpace + paragraphs[i];}mParagraphList.add(paragraph);}}private void findContents(List<String> paraList) {//字符串匹配模式String patternString = "第\\S{2,4}\\s\\S{2,}";Pattern pattern = Pattern.compile(patternString);for (String para:paraList) {Matcher matcher = pattern.matcher(para);if (matcher.find()){//除去段首多余空格int start = matcher.start();int end = matcher.end();String subString = para.substring(start, end);mBookContents.add(subString);   //目录mContentParaIndexs.add(paraList.indexOf(para)); //目录对应的在段落集合中的索引}}}public String getBookTitle() {return mBookTitle;}public Bitmap getBookCover() {return mBookCover;}public List<String> getParagraphList() {return mParagraphList;}public List<String> getBookContents() {return mBookContents;}public List<Integer> getContentParaIndexs() {return mContentParaIndexs;}
}

 

加载类:

public class BookLab {public static final String TEXT = "text";public static final String IMAGE = "image";private static BookLab sBookLab;private AssetManager mAssetManager;private List<Book> mBookList;//assets中的文件名清单private String[] mAssetsImageList;private String[] mAssetsTextList;private BookLab(Context context) {mAssetManager = context.getAssets();loadAssetsFiles();}public static BookLab newInstance(Context context) {if (sBookLab == null) {sBookLab = new BookLab(context);}return sBookLab;}//加载assets中的文件private void loadAssetsFiles() {mBookList = new ArrayList<>();//获取image、text中的文件名清单try {mAssetsImageList = mAssetManager.list(IMAGE);mAssetsTextList = mAssetManager.list(TEXT);} catch (IOException e) {e.printStackTrace();}for (int i = 0; i < mAssetsTextList.length; i++) {//获取书名String[] nameSplit = mAssetsTextList[i].split("_");String nameSecond = nameSplit[nameSplit.length - 1];String bookTitle = nameSecond.replace(".txt", "");//获取封面String imagePath = IMAGE + "/" + mAssetsImageList[i];Bitmap bookCover = loadImage(imagePath);//获取文本String textPath = TEXT + "/" + mAssetsTextList[i];String bodyText = loadText(textPath);Book book = new Book(bookTitle, bookCover, bodyText);mBookList.add(book);}}//从assets中读取文本private String loadText(String path) {InputStream in = null;BufferedReader reader = null;StringBuilder stringBuilder = new StringBuilder();try {in = mAssetManager.open(path);reader = new BufferedReader(new InputStreamReader(in));String line = "";while ((line = reader.readLine()) != null) {stringBuilder.append(line);}} catch (IOException e) {e.printStackTrace();} finally {if (reader != null) {try {reader.close();} catch (IOException e) {e.printStackTrace();}}}return stringBuilder.toString();}//从assets中读取图片private Bitmap loadImage(String path) {Bitmap image = null;InputStream in = null;try {in = mAssetManager.open(path);image = BitmapFactory.decodeStream(in);} catch (IOException e) {e.printStackTrace();} finally {try {in.close();} catch (IOException e) {e.printStackTrace();}}return image;}public List<Book> getBookList() {return mBookList;}
}

activity读取数据:

private List<Book> mBookList;
mBookList = BookLab.newInstance(this).getBookList();

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/415124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工作176:表单重置

复制代码 <el-form :model"loginForm" ref"loginFormRef"> // 1. 需要给表单指定 ref 属性 , 可以理解为表单的 名字<!-- 用户名 --><el-form-item prop"username"> // 2. 需要给 需要重置 的表单项指定 prop 属性, 值…

《掌握需求过程》阅读笔记05

需求策略需要平衡需求知识、活动和人。沟通需求知识的一致的语言&#xff0c;发现和传播知识的活动&#xff0c;参与的人&#xff0c;这些是影响需求策略的所有变量。 需求策略是一个活动的框架&#xff0c;需要根据给定的项目轮廓&#xff0c;执行这些活动。在工作中常遇到的轮…

Android 自定义字体,设置字体

效果图 实现代码&#xff1a; 1、先下载字体文件.ttf 下载链接&#xff1a;http://font.chinaz.com/maobiziti.html 2、main文件夹下创建fonts文件夹&#xff0c;.ttf文件复制到fonts文件夹下 3、读取ttf文件 List<Typeface> mTypefaceList new ArrayList(); priva…

docker 安装 centos

1、设置docker 镜像加速 三个源 名称路径网易https://hub-mirror.c.163.com/阿里云https://<你的ID>.mirror.aliyuncs.com七牛云加速器https://reg-mirror.qiniu.com "registry-mirrors":["https://hub-mirror.c.163.com/","https://reg-mirr…

工作177:时间戳转换

main.js // 将时间戳转日期格式的过滤器 Vue.filter(dateFormat, (dataStr) > {var time new Date(dataStr);function timeAdd0(str) {if (str < 10) {str 0 str;}return str}var y time.getFullYear();var m time.getMonth() 1;var d time.getDate();var h time…

管理点收集

1.建立一个“建议组” 来允许员工说出对工作过程中的不合理的地方的建议&#xff0c;不断收集建议 定期整改2.站立会议的按时举行3.文档管理制定负责人4.代码管理 版本定期发布5.尽可能的让员工之间的工作减少相互依赖&#xff08;减少相互之间的等待&#xff09;6.“所有人应该…

Android 简单几行代码实现摇一摇功能

1、activity 实现加速度监听类 。。。。implements SensorEventListener public class MainActivity extends AppCompatActivity implements SensorEventListener { 2、activity实现两个方法&#xff1a; Overridepublic void onSensorChanged(SensorEvent sensorEvent) {Se…

docker centos 环境 安装 python

1、下载安装python编译环境依赖 yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel #安装make编译所需的gcc,g编译器 yum -y install gcc automake autoconf libtool make wget 2、移除centos中自带的python2.7的环境变量 cd /…

Linux下Shell文件内容替换(sed)(转)

sed -i s/被替换的内容/要替换成的内容/g file #-i为直接修改并保存 参考&#xff1a; http://blog.sina.com.cn/s/blog_7211cb9201019hgd.html http://wangchujiang.com/linux-command/c/sed.html转载于:https://www.cnblogs.com/EasonJim/p/8018381.html

docker查看容器ip地址

docker inspect <containerid> 比如 docker inspect dcd61b573df1 里面包含"Gateway": "172.17.0.1" 可以读出ip

Android ContentProvider实现两个程序间数据共享demo,跨进程通讯

1、客户端代码&#xff1a; 先实现服务端 SQL创建&#xff1a; public class DBHelper extends SQLiteOpenHelper {// 数据库名private static final String DATABASE_NAME "finch.db";// 表名public static final String USER_TABLE_NAME "user";pub…

工作179:接口对接

/*创建我的视频接口 第一个参数自己手动录入 第二个参数取值任务详情的接口接口*/// postActionXing("/internal/users/current/video-projects",{// brand_id:this.account.brand_id,name:this.project_name// }).then(// res>{// this.project_idre…

二.java下使用RabbitMQ实现hello world

上一篇文章介绍了windows环境下的安装和配置rabbitMQ&#xff0c;具体戳这边&#xff0c;一.windows环境下rabbit的的安装和配置。 现在我们可以着手编写hello world程序了&#xff0c;一窥RabbitMQ的效用&#xff0c;从rabbitmq的官网的get start进入rabbitMQ文档学习区&#…

docker镜像导入、导出

导出镜像 docker save -o centos7.tar centos 导入本地镜像 sudo docker load --input centos7.tar

工作180:前端是业务需求理解

1做一个系统之前 要明确数据的一个处理流程 才能避免做返工操作

Android SQLite数据库demo。架构组件Room

Android架构组件Room Room主要包含三个部分&#xff1a; Database : 持有DB和DAOEntity : 定义POJO类&#xff0c;即数据表结构DAO(Data Access Objects) : 定义访问数据&#xff08;增删改查&#xff09;的接口 Entity(tableName "table_name**") 注解POJO类&…

转录组差异表达分析工具Ballgown

Ballgown是分析转录组差异表达的R包。 软件安装&#xff1a; 运行R&#xff0c; source(“http://bioconductor.org/biocLite.R”) biocLite(“ballgown”) R会自动安装Ballgown&#xff0c;及相应的依赖包。 Ballgown的输入文件 StringTie使用-B参数直接生成Ballgown的输入文件…

docker centos ssh

1、创建一个容器 docker run -d -p 18022:22 -p 18000:8000 --privileged -v /Users/caowei/share:/share --name yf c17f22223248 /usr/sbin/init 2、进入容器 docker exec -it 39550a9d4610 /bin/bash 3、安装openssh和openssh-server yum install -y passwd openssh op…

Android自定义view详解,使用实例,自定义属性,贝塞尔曲线

//只会触发执行onDraw方法&#xff0c;只会改变绘制里面的内容,条目的绘制 invalidate(); //只会触发执行onDraw方法&#xff0c;但是可以在子线程中刷新 postInvalidate(); //view的布局参数改变之后刷新&#xff0c;比如view的宽度和高度都修改了&#xff0c;只能通过reques…