转自https://www.cnblogs.com/linfenghp/p/5393832.html,感谢作者的无私分享。
xml文件我们可以用来保存一些数据。例如用来备份短信。这个例子中,我们就用XmlSerializer接口来实现一个备份短信的程序。当然了,为了程序简单化,这个程序我们并不是真的去备份短信。我们通过一个Message.java文件来作为javabean使用。用他来虚拟一个短信类。然后我们来备份虚拟出来的内容。
备份后,会在对应的目录下生成一个xml文件。我们可以用浏览器来打开,解析出xml来看。
直接看代码,对了,清单文件我就不弄上来了。清单文件没什么,因为要向sd卡写文件嘛,所以要添加个向sd卡写入的权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
Message.java文件:
package com.example.savexml;
public class Message {
// 定义短信内容
private String body;
// 定义短信日期
private String date;
// 定义发件人号码
private String address;
// 定义收发类型
private String type;
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;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
public Message(String body, String date, String address, String type) {
super();
this.body = body;
this.date = date;
this.address = address;
this.type = type;
}
}
MainActivity.java:
public class MainActivity extends Activity {
List<Message> smsList;
private Button btButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 存放短信的集合
smsList = new ArrayList<Message>();
// 虚拟出20条短信
for (int i = 0; i <= 20; i++) {
Message msm = new Message("短信内容" + i, System.currentTimeMillis()
+ "", "10086", "1");
smsList.add(msm);
}
btButton = (Button) findViewById(R.id.bt);
btButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
backup();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}
private void backup() throws IOException {
// 拿到xml序列化器
XmlSerializer xs = Xml.newSerializer();
// 包装外部存储路径
File file = new File(Environment.getExternalStorageDirectory(),
"info.xml");
FileOutputStream fos = null;
try {
// 用输出流输出info.xml
fos = new FileOutputStream(file);
// 指定用utf-8编码生成文件
xs.setOutput(fos, "UTF_8");
// 生成xml表头,两个参数表示表头属性
xs.startDocument("UTF-8", true);
// 生成根节点
/*
* 其实拼接的过程有点像写html文件, 无非就是一对标签,一对标签的写而已。
* 从代码可以看出,xs.startTag(),表示标签开始,endTag()表示标签结束。
* 第二个参数表示节点名称。
*/
xs.startTag(null, "message");
for (Message sms : smsList) {
xs.startTag(null, "sms");
xs.startTag(null, "body");
xs.text(sms.getBody());
xs.endTag(null, "body");
xs.startTag(null, "date");
xs.text(sms.getDate());
xs.endTag(null, "date");
xs.startTag(null, "address");
xs.text(sms.getAddress());
xs.endTag(null, "address");
xs.startTag(null, "type");
xs.text(sms.getType());
xs.endTag(null, "type");
xs.endTag(null, "sms");
}
xs.endTag(null, "message");
// 表示文档生成结束
xs.endDocument();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fos != null) {
fos.close();
Log.i("Back", "33333");
}
}
Toast.makeText(this, "备份完成", 0).show();
}
}