数据存储之文件存储
来源:互联网 发布:同花顺交易软件安装 编辑:程序博客网 时间: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);
}
}
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件存储
- 数据存储之文件
- Android数据存储之文件存储数据
- Android数据存储之文件存储
- Android数据存储之文件存储
- Android数据存储之文件存储
- Android数据存储之文件存储
- Android数据存储之文件存储
- android数据存储之文件存储
- Android数据存储之文件存储
- Android数据存储之“文件存储“
- pat Have Fun with Numbers
- Android中的dp和px之间的相互转换
- Java HashMap LinkedHashMap
- Linux Shell脚本攻略学习笔记
- 利用Servlet创建一个XML文档
- 数据存储之文件存储
- 剑指offer--二叉搜索树与双向链表
- 黑马程序员--Object-C构造方法
- 编写一个程序,用同一个函数名对n个数据进行从小到大排序,数据类型可以是整形,单精度,双精度。用重载函数实现
- 2015/4/19(2)
- poj 1161
- 抽象工厂模式(五):“开闭原则”的倾斜性,抽象工厂模式总结
- Linux的内存管理机制
- 第一章习题