博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
向android系统下sdcard中写入一个xml文件和读取一个xml文件
阅读量:6908 次
发布时间:2019-06-27

本文共 2903 字,大约阅读时间需要 9 分钟。

hot3.png

/*
*说明:这个代码是直接向android系统下sdcard中写入一个xml文件和读取一个xml文件*/
例子:---文件名称:itcast.xml
<?xml version="1.0" encoding="UTF-8"?>
<persons>
     <person id=“18">
          <name>allen</name>
          <age>36</age>
     </person>
     <person id=“28">
          <name>james</name>
          <age>25</age>
     </person>
</persons>

/*

 *添加权限<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
 *    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
*/

     //正文
 /**
  * 写xml文件到本地
  * 实体person类 (id name age)
  */
 private void writeXmlToLocal() {
  List<Person> personList = getPersonList();
  
  // 获得序列化对象
  XmlSerializer serializer = Xml.newSerializer();
  
  try {
   File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
   FileOutputStream fos = new FileOutputStream(path);
   // 指定序列化对象输出的位置和编码
   serializer.setOutput(fos, "utf-8");
   
   serializer.startDocument("utf-8", true); // 写开始 <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
   
   //null 命名空间
   serializer.startTag(null, "persons");  // <persons>
   
   for (Person person : personList) {
    // 开始写人

    serializer.startTag(null, "person"); // <person>

    serializer.attribute(null, "id", String.valueOf(person.getId()));
    
    // 写名字
    serializer.startTag(null, "name");  // <name>
    serializer.text(person.getName());
    serializer.endTag(null, "name");  // </name>
    
    // 写年龄
    serializer.startTag(null, "age");  // <age>
    serializer.text(String.valueOf(person.getAge()));
    serializer.endTag(null, "age");  // </age>
    
    serializer.endTag(null, "person"); // </person>
   }
   
   serializer.endTag(null, "persons");   // </persons>
   
   serializer.endDocument();  // 结束
  } catch (Exception e) {
   e.printStackTrace();
  }
  
 }
 
 //解析xml文件
 private List<Person> parserXmlFromLocal() {
  try {
   File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
   FileInputStream fis = new FileInputStream(path);
   
   // 获得pull解析器对象
   XmlPullParser parser = Xml.newPullParser();
   // 指定解析的文件和编码格式
   parser.setInput(fis, "utf-8");
   
   int eventType = parser.getEventType();   // 获得事件类型
   
   List<Person> personList = null;
   Person person = null;
   String id;
   while(eventType != XmlPullParser.END_DOCUMENT) {
    String tagName = parser.getName(); // 获得当前节点的名称
    
    switch (eventType) {
    case XmlPullParser.START_TAG:   // 当前等于开始节点  <person>
     if("persons".equals(tagName)) { // <persons>
      personList = new ArrayList<Person>();
     } else if("person".equals(tagName)) { // <person id="1">
      person = new Person();
      id = parser.getAttributeValue(null, "id");
      person.setId(Integer.valueOf(id));
     } else if("name".equals(tagName)) { // <name>
      person.setName(parser.nextText());
     } else if("age".equals(tagName)) { // <age>
      person.setAge(Integer.parseInt(parser.nextText()));
     }
     break;
    case XmlPullParser.END_TAG:  // </persons>
     if("person".equals(tagName)) {
      // 需要把上面设置好值的person对象添加到集合中
      personList.add(person);
     }
     break;
    default:
     break;
    }
    
    eventType = parser.next();  // 获得下一个事件类型
   }
   return personList;
  } catch (Exception e) {
   e.printStackTrace();
  }
  return null;
 }

转载于:https://my.oschina.net/byronhs/blog/478573

你可能感兴趣的文章
MyBatis 整合 Spring开发
查看>>
HTML互动视频教程
查看>>
电脑桌面图标问题
查看>>
策略路由实例
查看>>
新手文档 - 你应该知道什么
查看>>
模拟——软件——认知——终极无线电简述
查看>>
Pro*C 内嵌SQL
查看>>
spring cloud config client refresh过程
查看>>
深入浅出Future Pattern
查看>>
微信公众平台企业号回调模式的URL验证
查看>>
平台常用函数介绍
查看>>
公司讲座
查看>>
惆怅,诸事不顺
查看>>
Lambda架构与推荐在电商网站实践
查看>>
Docker Swarm与Apache Mesos的区别
查看>>
消息中间件保证消息一致性解决方案
查看>>
java内嵌浏览器DJNativeSwing
查看>>
【Git入门之七】Git和Github
查看>>
ActiveMQ学习笔记(4)——通过ActiveMQ收发消息
查看>>
Spring3 MyBatis3 日志配置
查看>>