从内存卡读取xml文件到内存,写入xml到sd卡

总结篇,android sd卡数据的读取,

权限的问题我在这里就不赘述了,写入和读取都需要权限,需要在配置文件里进行配置,这里不再配置

只展示主代码:

package com.example.xmlser;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;


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


import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;


import android.os.Environment;
import android.util.Log;
import android.util.Xml;


import com.example.xmlser.domain.Person;


public class xmlSerier {


//本列是想android内存卡写入xml文件,需要用到xml序列化类
//xmlXmlSerializer,这个类是单列设计,只能通过Xml得到
//创建数据源
public List<Person> getPersonList(){
List<Person> list=new ArrayList();
for(int i=0;i<30;i++){
Person per=new Person();
per.setName(""+i);
per.setAge(i);
if(i%2==0){
per.setSex("男");
}else{
per.setSex("女");
}
list.add(per);
}
return list;
};
//写入方法
public void peosonToXml(List<Person> personList){
//获得序列化对象
XmlSerializer xmlSerializer=Xml.newSerializer();


try {
//指定序列化地址和编码
File path=new File(Environment.getExternalStorageDirectory(),"person.xml");
Log.i("err2", path.toString());
FileOutputStream out= new FileOutputStream(path.toString());

//设置字节输出流,指定字符集
xmlSerializer.setOutput(out, "utf-8");
//设置doucument,开始写入
xmlSerializer.startDocument("utf-8", true);
//指定根节点
xmlSerializer.startTag(null, "persons");
//循环加入person节点
for(Person per:personList){
 xmlSerializer.startTag(null, "person");
 //设置名字
 xmlSerializer.attribute(null, "id", per.getName());
 //设置年龄
 xmlSerializer.startTag(null, "age");
 xmlSerializer.text(String.valueOf(per.getAge()));
 xmlSerializer.endTag(null,"age");
 //设置sex
 xmlSerializer.startTag(null, "sex");
 xmlSerializer.text(String.valueOf(per.getSex()));
 xmlSerializer.endTag(null,"sex");
 
 
 xmlSerializer.endTag(null, "person");

 

}
//结束根节点
xmlSerializer.endTag(null, "persons");
 //结束写入
xmlSerializer.endDocument();
 out.close();
 Log.i("drr", "正确了");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("err", "c成功"+e.toString());
}



}
public List<Person> readPersonList(){
/* <?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<persons>
<person id="0">
<age>0</age>
<sex>男</sex>
</person>

</persons>*/
//指定想xml文件路径
File path=new File(Environment.getExternalStorageDirectory(),"person.xml");
//获取解析器
XmlPullParser read=Xml.newPullParser();
try {
//设置解析器读取路径及编码
read.setInput(new FileInputStream(path), "utf-8");

//声明List<person>集合和Person对象,方便下面使用
//利于节省内存
List<Person> personList=null;
Person person=null;
//获取事件类型
int eventType=read.getEventType();
while(eventType!=XmlPullParser.END_DOCUMENT){
//获取当前节点的名称
String eleName=read.getName();
switch (eventType) {
case XmlPullParser.START_TAG:{

if(eleName.equals("persons")){//persons
//遇到更节点创建List集合
personList=new ArrayList<Person>();
}else if(eleName.equals("person")){//person
//遇到person节点,创建person对象
person=new Person();
//设置id属性

int id=Integer.parseInt(read.getAttributeValue(null, "id"));
person.setId(id);
}else if(eleName.equals("age")){//age
//获取age节点内容,并设置给person
person.setAge(Integer.parseInt(read.nextText()));
}else if(eleName.equals("sex")){//sex
// //获取sex节点内容,并设置给person
person.setSex(read.nextText());
}

}

break;
case XmlPullParser.END_TAG:{
//当一个person节点读取结束时,将person对象加入集合中
if(eleName.equals("person")){
personList.add(person);
}else if(eleName.equals("persons")){
return personList;
}
}
break;

}
//获取下一个事件
eventType=read.next();
}
Log.i("err","循环结束");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("err",e.toString());

return null;
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值