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<CallMessage> users){
		boolean flag=false;
		String str=writeToString(users);
		
		flag=writeToXml(UserSessionDic.getContext(), str);
		
		return flag;
	}
	
	 public String writeToString(List<CallMessage> 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<CallMessage> xmlParser() throws Exception{
			
			
			 List<CallMessage> 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<CallMessage>();
						 } 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;
			
		}
}