数据存储之文件存储

来源:互联网 发布:同花顺交易软件安装 编辑:程序博客网 时间:2024/04/30 06:22

1.在scr下建立要解析的xml文件

<?xml version="1.0" encoding="UTF-8"?>                 //start document(开始文档语法
<persons>            // Node Type (节点)?Element  Node /text node
    <person id="123">
        <name>liming</name>
        <age>30</age>
    </person>
    <personid="20>
        <name>zhangxiaoxiao</name>
        <age>25</age>
    </person>
</persons>
//end document(结束文档语法)     

2.怎么解析

package com.example.service;
import com.example.domin.Person;
public class PersonService {
/**
* 获取数据
* @param xml
* @return
* @throws Exception
*/
//业务并
public static List<Person> getPersons(InputStream xml) throws Exception{

List<Person> persons =null;

Person person=null;

//XmlPullParser pullParser=XmlPullParserFactory.newInstance().newPullParser(); //得到pull解析器
XmlPullParser pullParser=Xml.newPullParser();    //得到pull解析器

pullParser.setInput(xml, "UTF-8");       //为pull解析器设置要解析的XML数据。
int event=pullParser.getEventType();           //所产生的事件是一个数字
while(event!=XmlPullParser.END_DOCUMENT){      //判断文档是否解析结束
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons=new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(pullParser.getName())){     //判断节点的名称是否为person
int id=new Integer(pullParser.getAttributeValue(0));  //取到当前节点的属性值
person=new Person();
person.setId(id);
}
if("name".equals(pullParser.getName())){  //判断节点的名称是否为name
String name=pullParser.nextText();   //取得后面文本节点的节点值
person.setName(name);
}
if("age".equals(pullParser.getName())){  //判断节点的名称是否为name
int age=new Integer(pullParser.nextText());   //取到当前节点的属性值
person.setAge(age);
}
break;
case XmlPullParser.END_TAG:
if("person".equals(pullParser.getName())){
persons.add(person);
person=null;
}
break;
}
event=pullParser.next();     //让解析器的指针移到下一个节点
}
return persons;
}
/**
* 用面向对象的方式
* 保存数据到XML文件中
* @param persons数据
* @param out 输出方向
* @throws Exception
*/
public static void sava(List<Person>persons,OutputStream out)throws Exception{         //List<Person>persons是要保存的数据
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out,"UTF-8");            //设置内容的输出方向
serializer.startDocument("UTF-8", true);   
         //解析开始文件语句
serializer.startTag(null,"persons");

for(Person person:persons){                       //循环迭代
serializer.startTag(null, "person");
serializer.attribute(null,"id", person.getId().toString());        //传属性进去

serializer.startTag(null, "name");
serializer.text(person.getName());
serializer.startTag(null, "name");

serializer.startTag(null, "age");
serializer.text(person.getAge().toString());
serializer.startTag(null, "age");

serializer.endTag(null, "person");
}
serializer.endTag(null, "persons");
serializer.endDocument();
out.flush();
out.close();          //关掉
}
}

3.

package com.example.domin;


public class Person {
private Integer id;
private String name;
private Integer age;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
}

public Person(Integer id, String name, Integer age) {         //为person添加一个构造器
this.id = id;
this.name = name;
this.age = age;
}
public Person(){};          //无参数的构造器

}

4.进行单元测试:

package com.example.test;
import com.example.service.PersonService;
public class PersonServiceTest extends AndroidTestCase {//进行单元测试。
private static final String TAG="PersonServiceTest";

public void testPersons() throws Exception{
InputStream xml=this.getClass().getClassLoader().getResourceAsStream("person.xml"); 
List<Person> persons = PersonService.getPersons(xml);       //以输入流的形式传入
for(Person person:persons){
Log.i(TAG, person.toString());
}
}

public void testSava() throws Exception{
List<Person> persons=new ArrayList<Person>();
persons.add(new Person(43,"zhangxx",80));
persons.add(new Person(12,"lili",20));
persons.add(new Person(78,"xiaoxiao",8));


//保存到当前文件夹包的files文件下。
File xmlFile=new File (getContext().getFilesDir(),"itcast.xml");
FileOutputStream outStream=new FileOutputStream(xmlFile);
PersonService.sava(persons, outStream);
}


}

0 0
原创粉丝点击