_042_Android_使用Serializer去生成xml檔案
阿新 • • 發佈:2018-11-12
轉自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(); } }