向android系统下sdcard中写入一个xml文件和读取一个xml文件

本文提供了直接向Android系统下SD卡中写入和读取xml文件的示例代码,包括权限添加、xml文件的序列化与解析过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


/*
*说明:这个代码是直接向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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值