xml可以用来备份文件数据

Androidxml的读写

通常把数据封装到对象中,然后通过对象俩操作数据。包名不能使用AndroidJava的关键字。

当一个应用被删除时,该应用在内部存储空间内的所有数据都会被删除,而应用在外部存储空间的数据不会被删除。备份文件一般都放在外部存储空间中。

对于xml文件的校验,可以把xml文件放到浏览器中去解析,如果能够正常解析说明xml文件是正确的。

短信备份案例:

activity_main.xml

<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.test.backsms.MainActivity">

<Button

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="back"

android:text="备份短信"/>

</RelativeLayout>

通过bean封装对象

packagecom.test.backsms.domain;

publicclassMessageBean{

//短信的内容

privateStringbody;

//短信接收日期

privateStringdate;

//短信发送的目的地

privateStringaddress;

//短信的类型:接收或者是发送

privateStringtype;

publicStringgetBody(){

returnbody;

}

publicvoidsetBody(Stringbody){

this.body=body;

}

publicStringgetDate(){

returndate;

}

publicvoidsetDate(Stringdate){

this.date=date;

}

publicStringgetAddress(){

returnaddress;

}

publicvoidsetAddress(Stringaddress){

this.address=address;

}

publicStringgetType(){

returntype;

}

publicvoidsetType(Stringtype){

this.type=type;

}

publicMessageBean(Stringbody,Stringdate,Stringaddress,Stringtype){

super();

this.body=body;

this.date=date;

this.address=address;

this.type=type;

}

}

packagecom.test.backsms;

importjava.io.File;

importjava.io.FileNotFoundException;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.util.ArrayList;

importjava.util.List;

importandroid.app.Activity;

importandroid.os.Bundle;

importandroid.view.View;

importcom.test.backsms.domain.MessageBean;

publicclassMainActivityextendsActivity{

List<MessageBean>smsList;

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//模拟短信

//创建list对象存储短信

smsList=newArrayList<MessageBean>();//非常重要,不能忘记

for(inti=0;i<10;i++){

MessageBeanmb=newMessageBean("adsfasf",i+"","13985666565","1");

System.out.println(mb.getAddress()+mb.getBody()+mb.getDate()+mb.getType());

smsList.add(mb);

}

}

//备份短信

publicvoidback(Viewv){

//现在内存中把数据格式拼接出来,然后再写出去

//通过StringBuffer对象拼接

StringBuffersb=newStringBuffer();

//添加xml声明

sb.append("<?xmlversion='1.0'encoding='utf-8'standalone='yes'?>");

//添加根节点

sb.append("<message>");

//添加子节点

for(MessageBeansms:smsList){

sb.append("<sms>");

//添加内容节点

sb.append("<body>");

sb.append(sms.getBody());

sb.append("</body>");

sb.append("<date>");

sb.append(sms.getDate());

sb.append("</date>");

sb.append("<address>");

sb.append(sms.getAddress());

sb.append("</address>");

sb.append("<type>");

sb.append(sms.getType());

sb.append("</type>");

sb.append("</sms>");

}

sb.append("</message>");

Stringpath="sdcard/sms.xml";

Filefile=newFile(path);

try{

FileOutputStreamfos=newFileOutputStream(file);

try{

fos.write(sb.toString().getBytes());

//关流

fos.close();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}catch(FileNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

添加写权限

<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在Android中,提供了xml序列化器来生成xml文件。在Android中默认的编码格式为utf-8。xml序列化器会过滤掉没有用到的不完整的标签

package com.test.backsms;

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

import org.xmlpull.v1.XmlSerializer;

import android.app.Activity;
import android.os.Bundle;
import android.util.Xml;
import android.view.View;

import com.test.backsms.domain.MessageBean;

public class MainActivity extends Activity {

List<MessageBean> smsList;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//模拟短信
//创建list对象存储短信
smsList = new ArrayList<MessageBean>();//非常重要,不能忘记
for(int i=0;i<10;i++){
MessageBean mb = new MessageBean("adsfasf", i+"", "13985666565", "1");
System.out.println(mb.getAddress()+mb.getBody()+mb.getDate()+mb.getType());
smsList.add(mb);
}
}
//备份短信
public void back(View v) {
//使用序列化器生成xml对象
//1.拿到xml序列化对象
XmlSerializer xs = Xml.newSerializer();
//2.初始化 文件名和路径
String path = "sdcard/sms.xml";
String encoding ="utf-8";
File file = new File(path);
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
try {
//指定用什么编码生成xml文件
xs.setOutput(fos, encoding);
//3.开始生成xml
//指定xml文件申明中encoding的值,true表示yes,文件独立
xs.startDocument(encoding, true);
//生成文件的根节点xs.startTag(namespace, name);
xs.startTag(null, "message");
//生成xml文件的节点
for(MessageBean 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");


//告诉序列化器xml文件生成结束。
xs.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();
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
}




更多相关文章

  1. android鼠标滚轮bug
  2. android点滴2
  3. [应用代码] android源码之多线程断点续传下载
  4. Android(安卓)多个 Activity 调用 跳转
  5. Android(安卓)Android.mk文件各种模版参考
  6. Android心得3.4--用Pull解析器解析xml文件内容.doc
  7. android JNI C代码对sdcard中文件的操作
  8. android远程控制(一)----发现驱动文件里代码含义
  9. Mtk Android(安卓)app 默认激活设备管理器

随机推荐

  1. Spark2.x精通:源码剖析SortShuffleWriter
  2. Hadoop3.x入门:完全分布式Hadoop集群安装
  3. Spark2.x精通:BlockManagerMaster源码剖析
  4. Spark2.x精通:Checkpoint源码深度剖析
  5. Spark2.x精通:Executor端BlockManager源码
  6. cockpit监控系统
  7. MySQL常用的查询操作
  8. 17、运维核心技能-Linux系统下用户权限管
  9. 想找好用的BI软件?看这一篇就够了:2021年好
  10. 浅谈MySQL索引...