Android中生成xml文件

    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();
        }
        
    }
}




發佈了70 篇原創文章 · 獲贊 4 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章