安卓应用开发实战:[19]写xml文件
1、下面这个类可以用来存放短信信息,短信发送接收时间data, 短信类型type,短信内容body, 电话号码address。smsinfo自定义类代码
package com.example.smsinfo;
public class SmsInfo {
private long data;
private int type;
private String body;
private String Address;
public SmsInfo() {
}
public SmsInfo(long data, int type, String body, String address) {
super();
this.data = data;
this.type = type;
this.body = body;
Address = address;
}
public long getData() {
return data;
}
public void setData(long data) {
this.data = data;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
}
![安卓应用开发实战:[19]写xml文件](https://exp-picture.cdn.bcebos.com/486884883913e8e5d318f708352f477047187d4e.jpg)
2、在onCreate()方法内模拟产生了10条短信,其中 Random类可以获得随机数
private List<SmsInfo> smsInfos;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
smsInfos = new ArrayList<SmsInfo>();
Random random = new Random();
for(int i = 0;i<10;i++) {
smsInfos.add(new SmsInfo(System.currentTimeMillis(), random.nextInt(2)+1, "短信内容", i+100+""));
}
}
![安卓应用开发实战:[19]写xml文件](https://exp-picture.cdn.bcebos.com/acfda02f477046189b2cbe8fb08602214e57764e.jpg)
3、下面这段程序可以为创建xml文件开辟缓冲器,也就是把短信内容写得运存中。
StringBuilder sb = new StringBuilder();
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sb.append("<smss>");
for(SmsInfo oneIfo: smsInfos) {
sb.append("<data>");
sb.append(oneIfo.getData());
sb.append("</data>");
sb.append("<type>");
sb.append(oneIfo.getType());
sb.append("</type>");
sb.append("<body>");
sb.append(oneIfo.getBody());
sb.append("</body>");
sb.append("<address>");
sb.append(oneIfo.getAddress());
sb.append("</address>");
}
sb.append("</smss>");
![安卓应用开发实战:[19]写xml文件](https://exp-picture.cdn.bcebos.com/3ac71c214f579356194da294effb960b3021704e.jpg)
4、下面这段程序是往磁盘文件里写操作了,涉及到到IO操作处理异常。File file = new File(Environment.getExternalStorageDirectory()+"/backSmsInfo.xml"); FileOutputStream fos; try { fos = new FileOutputStream(file); try { fos.write(sb.toString().getBytes()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { fos.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); }
![安卓应用开发实战:[19]写xml文件](https://exp-picture.cdn.bcebos.com/f9617afb960b31214a975e17dee983aee9d76d4e.jpg)
5、如果使用使用安卓提供的序列化类XmlSerializer ,上面的操作就变得简单:下面这段代码就是写一个简单的xml文件
XmlSerializer serializer = Xml.newSerializer();
File file = new File(Environment.getExternalStorageDirectory()
+ "/backSmsInfo2.xml");
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
serializer.setOutput(fos, "utf-8");
serializer.startDocument("utf-8", true);
serializer.startTag(null, "smss");
for(SmsInfo ifo : smsInfos) {
serializer.startTag(null, "sms");
serializer.attribute(null, "id" ,ifo.getId()+"");
serializer.startTag(null, "data");
serializer.text(ifo.getBody()+"");
serializer.endTag(null, "data");
serializer.endTag(null, "sms");
}
serializer.endTag(null, "smss");
serializer.endDocument();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
};
![安卓应用开发实战:[19]写xml文件](https://exp-picture.cdn.bcebos.com/30601b6104a355e9d158b263d22ae3efe178684e.jpg)