在上篇博客里,介绍了如何读取assets目录下的txt文件。在这里,介绍如何读取xml文件。

xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<books> <book id="001"> <title>Harry Potter</title> <price>¥35.00</price> </book> <book id="002"> <title>Learning XML</title> <price>¥66.00</price> </book> <book id="003"> <title>Thinking in Java</title> <price>¥1.00</price> </book> <book id="004"> <title>Useful Android</title> <price>¥1.50</price> </book>
</books> 

根据xml文件,接下来定义一个Book类,有id, title, price三个属性。

然后使用一个子线程,通过AssetManager读取到数据流,再使用XmlPullParser解析xml文件。

完整示例代码如下:

package com.li.readassetfile;import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;import android.app.Activity;
import android.content.res.AssetManager;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.os.Handler;
import android.util.Xml;
import android.widget.TextView;public class ReadXmlActivity extends Activity {private TextView tvContent;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_read_xml);tvContent = (TextView) findViewById(R.id.tvContent);new Handler().post(new Runnable() {@Overridepublic void run() {AssetManager manager = getResources().getAssets();List<Book> books = null;  Book book = null;try {InputStream inputStream = manager.open("book.xml");  XmlPullParser parser = Xml.newPullParser();  parser.setInput(inputStream, "UTF-8"); StringBuilder sb = new StringBuilder();try {while(parser.getEventType() != XmlPullParser.END_DOCUMENT){if(parser.getEventType() == XmlPullParser.START_DOCUMENT){books = new ArrayList<ReadXmlActivity.Book>();}else if(parser.getEventType() == XmlPullParser.START_TAG){if("book".equals(parser.getName())){book = new Book();book.setId(parser.getAttributeValue(0));}if(book!=null){  if("title".equals(parser.getName())){//判断开始标签元素是否是name  book.setTitle(parser.nextText());  }else if("price".equals(parser.getName())){//判断开始标签元素是否是price  book.setPrice(parser.nextText());  }  }  }else if(parser.getEventType() == XmlPullParser.END_TAG){if("book".equals(parser.getName())){//判断结束标签元素是否是book  books.add(book);//将book添加到books集合  book = null;  }  }parser.next();}if(books != null && books.size() > 0){                          for(int i = 0; i < books.size(); i ++){sb.append(books.get(i).getId() + "\b\b");sb.append(books.get(i).getTitle() + "\b\b");sb.append(books.get(i).getPrice() + "\b\b");sb.append("\n");}}inputStream.close();tvContent.setText(sb.toString());} catch (XmlPullParserException e) {e.printStackTrace();}} catch (IOException | XmlPullParserException e) {e.printStackTrace();}}});}private class Book{private String id;private String title;private String price;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}}
}

使用完,要注意关闭数据流。为了防止ANR,所以这里使用子线程来读取xml文件。

转载于:https://www.cnblogs.com/lishbo/p/9956021.html

Android:读取assets目录下文件(二)相关推荐

  1. Android读取assets目录下文件数据内容

    Android读取assets目录下文件数据内容 Android的体系架构设计中,assets目录下的数据内容(图片.文件等等)将不会被Android系统压缩.二次处理等,assets目录下的文件 ...

  2. WebApp基础01-设置读取assets目录下文件

    要读取assets下的目录,只需要修改三个地方即可 1.res/layout/activity_main.xml 2.AndroidManifest.xml 3.src\com\example\lcy ...

  3. android assets 文件夹 复制,Android 中 Assets目录下 文件或文件夹的复制

    1.文件或文件夹的复制 /* * 下面两个方法不是AsyncTask的接口 * * copyFileOrDir 目录复制 * copyFile 文件复制 */ private void copyFil ...

  4. android 获取assets目录下文件的路径

    暴力直接获取 String path = "file:///android_asset/icon_wm.png"; 先把文件读成流,在转化地址 String path = null ...

  5. android读取mysql数据库文件_Android开发系列(十七):读取assets目录下的数据库文件...

    在做Android应用的时候,不可避免要用到数据库.但是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的. (PS:这篇博客解决了我前面博客中 ...

  6. 安卓读取mysql数据库文件路径_Android开发实现读取assets目录下db文件的方法示例...

    本文实例讲述了Android开发实现读取assets目录下db文件的方法.分享给大家供大家参考,具体如下: 最近准备打算写一个关于天气预报的app,偶然的机会在一大神的博客上看到了一个获取天气的api ...

  7. Android复制Assets目录下的文件到/data/data目录

    目的 l  在项目开发时,尤其是游戏开发,有时候需要把特定的文件放在data/data目录下,比如sqlite数据库中,我们会事先创建数据库并在里面加入需要的数据,比如游戏的关卡数据.而android ...

  8. Android复制assets目录下的图片到内存

    转自:http://www.chenwg.com/android/android%E5%A4%8D%E5%88%B6assets%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84 ...

  9. java读取resouces目录下文件

    resources中存放一些个资源文件,比如properties文件等,编译好会自动将这里边的文件复制到target/classes里去.获取资源文件的方法说明: XXX.class.getResou ...

最新文章

  1. 句法分析应用领域及意义
  2. python3.7 的pygame安装方法_Python中pygame安装方法图文详解
  3. BZOJ-1923-外星千足虫-SDOI2010
  4. Ranger中对hive添加policy字后,hive登录用户可用,hive密码不管用的问题解决,HiveServer2 Authentication Custom的编写
  5. Linux命令执行顺序— ||和和; 比较
  6. Win32API不规则窗口制作
  7. JavaSE教程_1 安装jdk
  8. brctl 命令详解
  9. 神州十三号就位,小火箭先去探探路
  10. C语言排序函数qsort用法
  11. 分布式mysql cobar_Mysql分布式中间件:Cobar server
  12. pubg显示服务器安装失败,绝地求生全军出击怎么安装不了 安装失败解决办法
  13. PS图片无法保存ICO格式解决方法
  14. [转载]17岁高考落榜生成为世界顶尖IT高手
  15. python中除号怎么写_除号怎么写
  16. Oracle数据库设计方法
  17. “在朋友圈晒了五年加班,才知道老板早就把我屏蔽了”
  18. 关于系统设计原则回顾
  19. i春秋网鼎杯网络安全大赛advanced题目writeup
  20. 本地调试(local debug)Hive源码

热门文章

  1. 腾讯 监控系统服务器数据采集,腾讯天津数据中心机房监控项目
  2. java向上和向下的区别_Java的向上和向下转型
  3. 多输出模型的评价和模型预测
  4. 求有向图中两点最短距离java_Java 迪杰斯特拉算法实现查找最短距离
  5. 一个简单的现代化公司域名使用规律预测及生成工具
  6. 矿区无人机影像地物提取(语义分割)
  7. 客户忠诚度及会员等级划分
  8. java如果把字符串转成对象_为什么Java中的字符串对象是不可变的,有什么好处?...
  9. 数据结构与算法-java笔记一 更新中
  10. C#高仿腾讯QQ截图程序(改)