_042_Android_使用Serializer去生成xml文件

转自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();

    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值