场景:Android学习札记(八)之Android 读写xml文件
Android学习笔记(八)之Android 读写xml文件
/**
* XmlTool.java
* 版权所有(C) 2012
* 创建:cuiran 2012-9-19 下午3:39:40
*/
package com.wpn.xml;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlSerializer;
import android.content.Context;
import android.util.Log;
import android.util.Xml;
import com.alibaba.fastjson.JSON;
import com.wpn.constants.Conf;
import com.wpn.data.UserSessionDic;
import com.wpn.message.CallMessage;
/**
* TODO
* @author cuiran
* @version TODO
*/
public class XmlTool {
public boolean writeXML(List users){
boolean flag=false;
String str=writeToString(users);
flag=writeToXml(UserSessionDic.getContext(), str);
return flag;
}
public String writeToString(List users){
//实现xml信息序列号的一个对象
XmlSerializer serializer=Xml.newSerializer();
StringWriter writer=new StringWriter();
try{
//xml数据经过序列化后保存到String中,然后将字串通过OutputStream保存为xml文件
serializer.setOutput(writer);
//文档开始
serializer.startDocument("utf-8", true);
//开始一个节点
serializer.startTag("", "calls");
serializer.attribute("", "type", "list");
for(CallMessage call :users){
Log.i(Conf.TAG_DUBUG, "call="+JSON.toJSONString(call));
serializer.startTag("", "call");
/**
* 加属性
*/
// serializer.attribute("", "ordernum", call.getOrdernum());
serializer.startTag("", "ordernum");
serializer.text(call.getOrdernum());
serializer.endTag("", "ordernum");
serializer.startTag("", "bytime");
serializer.text(call.getBytime());
serializer.endTag("", "bytime");
serializer.startTag("", "notifytime");
serializer.text(call.getNotifytime());
serializer.endTag("", "notifytime");
serializer.startTag("", "servertime");
serializer.text(call.getServertime());
serializer.endTag("", "servertime");
serializer.startTag("", "slocation");
serializer.text(call.getSlocation());
serializer.endTag("", "slocation");
serializer.startTag("", "isread");
serializer.text(call.getIsread());
serializer.endTag("", "isread");
serializer.endTag("", "call");
}
serializer.endTag("", "calls");
//关闭文档
serializer.endDocument();
}catch (Exception e) {
Log.i(Conf.TAG_ERROR, e.getMessage());
}
return writer.toString();
}
/**
* 将xml字符串写入xml文件
* @param context
* @param str
* @return
*/
public boolean writeToXml(Context context,String str){
try {
OutputStream out=context.openFileOutput("calls.xml", Context.MODE_PRIVATE);
OutputStreamWriter outw=new OutputStreamWriter(out);
try {
outw.write(str);
outw.close();
out.close();
return true;
} catch (IOException e) {
// TODO Auto-generated catch block
return false;
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
return false;
}
}
/**
* 验证是否存在该文件
* @return
* @throws Exception
*/
public boolean isExist()throws Exception{
boolean flag=false;
FileInputStream fs= UserSessionDic.getContext().openFileInput("calls.xml");
if(fs!=null){
flag=true;
}
return flag;
}
public List xmlParser() throws Exception{
List reslist= null;
CallMessage call=null;
try {
FileInputStream fs= UserSessionDic.getContext().openFileInput("calls.xml");
XmlPullParser parser = Xml.newPullParser();
parser.setInput(fs, "UTF-8");
int eventType = parser.getEventType();
while ((eventType = parser.next()) != XmlPullParser.END_DOCUMENT) {
switch (eventType) {
case XmlPullParser.START_TAG:
String name=parser.getName();
Log.i(Conf.TAG_DUBUG, "name:"+name);
if (parser.getName().equals("calls")) {
reslist = new ArrayList();
} else if (name.equals("call")) {
call = new CallMessage(Conf.COMMANDID_RECEIVE);
//contact.setId(Integer.valueOf(parser.getAttributeValue(0)));
} else if (name.equals("ordernum")) {
String ordernum=parser.nextText();
Log.i(Conf.TAG_DUBUG, "订单:"+ordernum);
call.setOrdernum(ordernum);
} else if (name.equals("bytime")) {
call.setBytime(parser.nextText());
}else if (name.equals("notifytime")) {
call.setNotifytime(parser.nextText());
}else if (name.equals("servertime")) {
call.setServertime(parser.nextText());
}else if (name.equals("slocation")) {
call.setSlocation(parser.nextText());
}else if (name.equals("isread")) {
call.setIsread(parser.nextText());
}
break;
case XmlPullParser.END_TAG:
String name1=parser.getName();
if (name1.equals("call")) {
reslist.add(call);
}
break;
}
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return reslist;
}
}