第1种方式:StringBuffer (不推荐)
通过StringBuffer 拼接字符串的方式自己组拼,最后将字符串存入一个自己定义的文件中(.xml)
//生成xml文件的第一种方式
public void click(View v) {//点击按钮通过StringBuffer生成xml
//创建生成字符串的对象
StringBuffer sBuffer = new StringBuffer();//单线程用StringBuilder更安全一些
//开始组拼xml的文件头(注意用 \ 转义)
sBuffer.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
//开始组拼xml根节点
sBuffer.append("<smss>");
//开始组拼sms节点
for (Sms sms : smsList) {
sBuffer.append("<sms>");
//开始组拼address节点
sBuffer.append("<address>");
sBuffer.append(sms.getAddress());
sBuffer.append("</address>");
//开始组拼body节点
sBuffer.append("<body>");
sBuffer.append(sms.getBody());
sBuffer.append("</body>");
//开始组拼date节点
sBuffer.append("<date>");
sBuffer.append(sms.getDate());
sBuffer.append("</date>");
sBuffer.append("</sms>");
}
sBuffer.append("</smss>");
//把数据保存到sd卡中
try {
File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup.xml");
FileOutputStream fos = new FileOutputStream(file);
fos.write(sBuffer.toString().getBytes());
fos.close();//关闭流
System.out.println("保存成功");
} catch (Exception e) {
e.printStackTrace();
}
}
第2种方式:XmlSerializer (推荐)
//生成xml文件的第二种方式
public void click(View v) {//点击按钮通过XmlSerializer类生成一个xml文件
try {
//获取XmlSerializer类的实例,通过xml工具类来获取
XmlSerializer serializer = Xml.newSerializer();
//设置XmlSerializer序列化器参数
File file = new File(Environment.getExternalStorageDirectory().getPath(),"smsbackup2.xml");
FileOutputStream fos = new FileOutputStream(file);
serializer.setOutput(fos,"utf-8");
//开始写xml文档的开头
serializer.startDocument("utf-8", true);//文档的编码格式
//写xml的根节点,namespace 命名空间
serializer.startTag(null, "smss");//smss开始
//循环写sms节点
for (Sms sms : smsList) {
serializer.startTag(null, "sms");//sms开始
//开始address节点
serializer.startTag(null, "address");
serializer.text(sms.getAddress());
serializer.endTag(null, "address");
//开始body节点
serializer.startTag(null, "body");
serializer.text(sms.getBody());
serializer.endTag(null, "body");
//开始date节点
serializer.startTag(null, "date");
serializer.text(sms.getDate());
serializer.endTag(null, "date");
serializer.endTag(null, "sms");//sms结尾
}
serializer.endTag(null, "smss");//smss结尾
serializer.endDocument();//写文档的结尾(写一个开头就写一个结尾,不会出错)
fos.close();//关闭流
System.out.println("保存成功");
} catch (Exception e) {
e.printStackTrace();
}
}
附:Sms类
public class Sms {
private String address;
private String body;
private String date;
/**生成属性getter和setter方法
* 右键 Source--Generate Getters and Setters... --全选
*/
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getDate() {
return date;
}
public void setDate(String date) {
this.date = date;
}
}
附:模拟数据
private List<Sms> smsList;//定义一个存储Sms对象的数组
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建模拟数据
smsList = new ArrayList<Sms>();
for (int i = 0; i < 3; i++) {
Sms sms = new Sms();
sms.setAddress("10001"+i);
sms.setBody("你好"+i);
sms.setDate("199"+i);
//把sms对象加入到集合中
smsList.add(sms);
}
}
网友评论