Android中生成xml文件

来源:互联网 发布:80端口被系统占用 编辑:程序博客网 时间:2024/06/05 20:41
    xml可以用来备份文件数据

Androidxml的读写

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

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

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

 

短信备份案例:

activity_main.xml

<RelativeLayout xmlns: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封装对象

 

package com.test.backsms.domain;

public class MessageBean {

//短信的内容

    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 MessageBean(String body, String date, String address, String type) {

        super();

        this.body = body;

        this.date = date;

        this.address = address;

        this.type = type;

    }

}

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 android.app.Activity;

import android.os.Bundle;

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) {

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

//通过StringBuffer对象拼接

    StringBuffer sb = new StringBuffer();

//添加xml声明

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

//添加根节点

    sb.append("<message>");

//添加子节点

    for (MessageBean sms :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>");

    String path = "sdcard/sms.xml";

    File file = new File(path);

    try {

        FileOutputStream fos = new FileOutputStream(file);

        try {

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

                //关流

                fos.close();

        } catch (IOException e) {

        // TODO Auto-generated catch block

            e.printStackTrace();

            }

        } catch (FileNotFoundException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

        }

    }

}

添加写权限

<uses-permission android: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();
        }
        
    }
}




0 0