需求:①写一个xml文件到手机;②从手机读取一个xml文件并解析出数据
代码:
xml操作:
package com.suzi.xmldemo;
import android.os.Environment;
import android.util.Xml;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Suzi on 2016/7/12.
*/
public class WriteXmlToPhone
{
/**
* 写一个xml文件到手机SD卡
*
* @param path
*/
public void writeXmlTOPhone(File path)
{
List<Person> personList = getPersonList();
XmlSerializer xmlSerializer = Xml.newSerializer();
try
{
// File path = new File(Environment.getExternalStorageDirectory(),
// "persons.xml");
FileOutputStream fos = new FileOutputStream(path);
//设置输出位置和编码
xmlSerializer.setOutput(fos, "utf-8");
//正式写文件
xmlSerializer.startDocument("utf-8", true); //头文件,开始写
xmlSerializer.startTag(null, "persons");
for (Person person : personList)
{
xmlSerializer.startTag(null, "person");
//写name
xmlSerializer.startTag(null, "name");
xmlSerializer.text(person.getName());
xmlSerializer.endTag(null, "name");
//写age
xmlSerializer.startTag(null, "age");
xmlSerializer.text(person.getAge());
xmlSerializer.endTag(null, "age");
xmlSerializer.endTag(null, "person");
}
xmlSerializer.endTag(null, "persons");
xmlSerializer.endDocument(); //结束
} catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 从手机SD卡读取xml文件,解析其中的数据
* @return List<Person>
*/
public List<Person> readXmlFromPhone()
{
try
{
XmlPullParser parser = Xml.newPullParser();
File path = new File(Environment.getExternalStorageDirectory(), "persons.xml");
FileInputStream fis = new FileInputStream(path);
List<Person> personList = null;
Person person = null;
String id;
String tagName;
//指定解析的文件和编码格式
parser.setInput(fis, "utf-8");
//获得事件的类型
int eventType = parser.getEventType();
while (eventType != XmlPullParser.END_DOCUMENT)
{
tagName = parser.getName(); //获得当前节点名称
switch (eventType)
{
case XmlPullParser.START_TAG:
if ("persons".equals(tagName))
{
//读取到<persons>节点时创建personList,接下来读取具体的对象就存入当中
personList = new ArrayList<Person>();
} else if ("person".equals(tagName))
{
//读取到<person>,创建person对象,用于接下来存放具体的值
person = new Person();
} else if ("name".equals(tagName))
{
//读取到<name>,存放到上面创建的person对象中
person.setName(parser.nextText());
} else if ("age".equals(tagName))
{
//读取到<age>.........
person.setAge(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(tagName))
{
//读取到</person>,一个person读取完毕,将person对象存放到personList中
personList.add(person);
}
break;
}
eventType = parser.next();
}
return personList; // 如果没有异常,返回读取到的personList
} catch (Exception e)
{
e.printStackTrace();
}
return null;
}
public List<Person> getPersonList()
{
List<Person> personList = new ArrayList<Person>();
for (int i = 0; i < 10; i++)
{
personList.add(new Person(String.valueOf("name_" + i), String.valueOf(i)));
}
return personList;
}
}
Ps:加文件操作权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>