`
DanielHan
  • 浏览: 57384 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
074641d7-eb86-343f-a745-65a0f693edb5
设计模式
浏览量:7377
社区版块
存档分类
最新评论

存储方式二:文件(XML XmlPull解析)

 
阅读更多
1.读
LinkMan.java
package com.example.xmlpulldemo;

public class LinkMan {
	private String name;
	private String email;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}


XmlPullUtil.java
package com.example.xmlpulldemo;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

public class XmlPullUtil {

	private InputStream input;
	private List<LinkMan> all=null;
	private String curElement=null;
	private LinkMan man=null;

	public XmlPullUtil(InputStream input) {
		this.input = input;
	}
	
	public List<LinkMan> getAll(){
		XmlPullParserFactory factory=null;
		XmlPullParser parser=null;
		try {
			factory=XmlPullParserFactory.newInstance();
			parser=factory.newPullParser();
			parser.setInput(input, "UTF-8");
			int eventType=parser.getEventType();//事件码
			while(eventType!=XmlPullParser.END_DOCUMENT){
				switch(eventType){
					case XmlPullParser.START_DOCUMENT:
						all=new ArrayList<LinkMan>();
						break;
					case XmlPullParser.START_TAG:
						curElement=parser.getName();
						if(curElement.equals("linkman")){
							man=new LinkMan();
						}
						break;
					case XmlPullParser.TEXT:
						if(curElement.equals("name")){
							man.setName(parser.getText());
						}else if(curElement.equals("email")){
							man.setEmail(parser.getText());
						}
						break;
					case XmlPullParser.END_TAG:
						curElement=parser.getName();
						if(curElement.equals("linkman")){
							all.add(man);
							man=null;
						}
						break;
					case XmlPullParser.END_DOCUMENT:
						break;
					default:
						break;
				}
				eventType=parser.next();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return all;
	};
}


Main.java
package com.example.xmlpulldemo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.TextView;
import android.widget.Toast;

public class Main extends Activity {
	private TextView name=null;
	private TextView email=null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		name=(TextView)findViewById(R.id.name);
		email=(TextView)findViewById(R.id.email);
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			File file=new File(Environment.getExternalStorageDirectory()+File.separator+"files/addresslist.xml");
			if(!file.exists()){//文件不存在
				return;
			}
			InputStream input=null;
			try {
				input = new FileInputStream(file);
			} catch (FileNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			XmlPullUtil util=new XmlPullUtil(input);
			List<LinkMan> all=util.getAll();
			name.setText(all.get(0).getName());
			email.setText(all.get(0).getEmail());
		}else{
			Toast.makeText(this, "没有sdcard", Toast.LENGTH_LONG).show();
		}
	}
}


2.写
XmlPullUtil.java
package com.example.xmlpulldemo;

import java.io.OutputStream;
import java.util.Iterator;
import java.util.List;

import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;

public class XmlPullUtil {

	private OutputStream output;
	private List<LinkMan> all;

	public XmlPullUtil(OutputStream output,List<LinkMan> all) {
		this.output=output;
		this.all=all;
	}
	
	public void save(){
		XmlPullParserFactory factory=null;
		XmlSerializer xs=null;
		try {
			factory=XmlPullParserFactory.newInstance();
			xs=factory.newSerializer();
			xs.setOutput(output, "UTF-8");
			xs.startDocument("UTF-8", true);
			xs.startTag(null, "addresslist");
			Iterator<LinkMan> iterator=all.iterator();
			while(iterator.hasNext()){
				LinkMan man=iterator.next();
				xs.startTag(null, "linkman");
				xs.startTag(null, "name");
				xs.text(man.getName());
				xs.endTag(null, "name");
				xs.startTag(null, "email");
				xs.text(man.getEmail());
				xs.endTag(null, "email");
				xs.endTag(null, "linkman");
			}
			xs.endTag(null, "addresslist");
			xs.endDocument();
			xs.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	};
}


Main.java
package com.example.xmlpulldemo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.widget.Toast;

public class Main extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
			File file=new File(Environment.getExternalStorageDirectory()+File.separator+"files/demo.xml");
			if(!file.getParentFile().exists()){
				file.getParentFile().mkdirs();
			}
				List<LinkMan> all=new ArrayList<LinkMan>();
				for(int i=0;i<2;i++){
					LinkMan man=new LinkMan();
					man.setName("DanielHan"+i);
					man.setEmail(i+"@qq.com");
					all.add(man);
				}
				try {
					XmlPullUtil util=new XmlPullUtil(new FileOutputStream(file), all);
					util.save();
				} catch (FileNotFoundException e) {
					e.printStackTrace();
				}
		}else{
			Toast.makeText(this, "没有sdcard", Toast.LENGTH_LONG).show();
		}
	}
}
分享到:
评论

相关推荐

    对xml文件进行xmlpull解析jar包

    在处理XML文件时,有多种解析方式,其中XMLPull解析是一种轻量级、高效的解析方法,适用于资源有限的环境,如移动设备。XMLPull解析器允许应用程序以拉取(pull)的方式逐个读取XML元素,而不是等待整个文档加载完毕...

    xml解析+kxml2+xmlpull

    XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于网络数据交换、配置文件存储等场景。在Android开发中,XML解析是处理XML文档不可或缺的技术,主要包括DOM(Document Object Model)、SAX...

    xmlpull-1.1.3.1.jar

    在Android开发中,XMLPull解析器被广泛使用,因为它不需要完整的DOM树(Document Object Model)来存储XML文档,而是通过事件驱动的方式解析XML内容。这种方式既节省内存,又提高了性能。 XMLPull的基本原理是,它...

    xstream+xmlpull xml to bean &&bean to xml

    XMLPull是轻量级的API,用于解析XML文档,它允许开发者以事件驱动的方式处理XML流,而无需提前加载整个文档到内存中。 XStream的核心功能在于它的“marshalling”和“unmarshalling”能力。Marshalling是将Java对象...

    Andrond xml文件解析器

    在Android开发中,XML文件广泛用于存储数据,如布局文件、配置文件等。"Andrond xml文件解析器"是一个针对Android平台的简单XML解析工具,它提供了三种不同的解析方法,便于开发者根据需求选择合适的方式读取和处理...

    XML.rar_XML phone_XML 解析

    2. SAX解析:Simple API for XML,采用事件驱动模型,逐行读取XML文件,遇到元素、属性等时触发相应事件。SAX解析器占用内存小,适合处理大文件,但需要编写更多事件处理代码。 四、XML解析实例 在手机应用中,解析...

    三种XML文件解析例子

    Pull解析器是Android特有的轻量级XML解析方式,适合处理大型XML文件。`PullForXml`示例中,可能涉及以下步骤: 1. 引入`org.xmlpull.v1.XmlPullParserFactory`和`XmlPullParser`,创建`XmlPullParser`实例。 2. 设置...

    使用Pull解析器读取XML文件和生成XML文件

    在IT行业中,XML(eXtensible Markup Language)是一种重要的数据交换格式,广泛应用于网络通信、数据存储和配置文件等领域。本篇文章将深入探讨如何使用Pull解析器来读取XML文件,以及如何生成XML文件。Pull解析器...

    android Pull XML文件解析 存取 代码程序

    3. 循环解析:通过循环调用`parser.next()`,获取XML事件,并根据事件类型进行处理。 ```java int eventType = parser.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if (eventType == ...

    3.8 解析XML

    1. XMLPull解析: XMLPull是一种轻量级的解析器,适用于资源有限的环境,如移动设备。它不需预先加载整个XML文档,而是采用拉(pull)的方式,允许应用程序按需读取XML元素。开发者通过创建XMLPullParser对象,然后...

    在android中使用pull解析xml文件

    在Android开发中,XML文件常用于存储数据,如配置文件、布局文件等。Pull解析器是一种轻量级的解析方式,适用于处理XML流,尤其在内存有限的移动设备上更为适用。本文将深入探讨如何在Android中使用Pull解析器解析...

    xml三种解析方法实现

    例如,在Java中,SAX解析可以使用`org.xml.sax`包,DOM解析可以使用`javax.xml.parsers`包,而XML Pull解析可以使用`org.xmlpull.v1`包(如kxml2或StaX)。在实现时,需要根据解析方法的特性编写相应的代码逻辑,...

    用pullXML解析本地数据并存在本地

    XMLPull解析器是一种事件驱动的解析方式,它不会一次性加载整个XML文档到内存中,而是通过阅读XML文档的各个节点,触发相应的事件(如START_DOCUMENT、START_TAG、END_TAG等)。这样既节省了内存,又提高了解析速度...

    android 安卓xml pull解析

    在Android中,我们使用`org.xmlpull.v1.XmlPullParser`接口来实现XML Pull解析。这个接口提供了诸如`next()`、`getName()`、`getText()`等方法,帮助我们按需读取XML文档的各个部分。Android还提供了`...

    三种形式完成xml的解析

    XML(eXtensible Markup Language)是一种用于存储和传输数据的标记语言,广泛应用于软件开发、Web服务和数据交换等领域。本教程将详细介绍三种主要的XML解析方式:DOM(Document Object Model)、SAX(Simple API ...

    android XML文件解析和序列化 demo

    这个"android XML文件解析和序列化 demo"旨在教你如何处理XML数据,包括解析XML文件以获取信息并将其存储为对象,以及将这些对象序列化回XML文件。下面我们将详细探讨这两个关键过程。 **XML解析** 1. **DOM解析器...

    Android review xml 解析 生成

    在Android开发中,XML文件广泛用于存储数据、配置和用户界面布局。XML解析是将XML数据转换为程序可处理的数据结构的关键步骤。本篇将深入探讨Android中的XML解析,包括DOM解析、SAX解析和Pull解析,以及如何生成XML...

    android xmlpull详细源代码

    XMLPull解析器是一种轻量级、高效的解析XML的方式,它不需要完整的DOM树(文档对象模型)或者SAX(简单API for XML)事件驱动模型。本教程将深入探讨Android中的XMLPull解析,并通过具体的源代码分析来帮助理解其...

    Android Xml解析方式

    本篇将详细讲解在Android环境中,如何使用DOM、PULL和SAX三种解析方式来处理XML文件。 一、DOM解析方式 DOM(Document Object Model)解析器将整个XML文档加载到内存中,形成一个树形结构,方便开发者通过节点操作...

    android 三种方式解析XML(DOM,Pull,Sax) 带文件编码识别

    其次,Pull解析器是一种事件驱动的解析方式,它不将整个文件加载到内存,而是按需读取XML数据。这种方式适用于处理大型XML文件,因为它节省了内存。Android提供了`org.xmlpull.v1.XmlPullParser`接口,开发者可以...

Global site tag (gtag.js) - Google Analytics