Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android編程之xml文件讀取和寫入方法

android編程之xml文件讀取和寫入方法

編輯:關於Android編程

本文實例講述了android編程之xml文件讀取和寫入方法。分享給大家供大家參考。具體分析如下:

一、環境:

主機:WIN8
開發環境:Eclipse

二、說明:

1.打開sd卡中的xml文件,如果不存在,這新建一個,並寫入默認配置
2.讀取xml文件

三、xml文件格式:

<?xml version="1.0" encoding="UTF-8" standalone="true"?> 
-<config> 
<title>遠程視頻會見系統</title> 
<local_port>12600</local_port> 
<schedule_service_ip>10.58.1.59</schedule_service_ip>
<schedule_service_port>12601</schedule_service_port> 
</config>

四、源代碼:

package com.example.helloanychat; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.StringWriter; 
import java.net.Inet6Address; 
import java.net.InetAddress; 
import java.net.NetworkInterface; 
import java.net.SocketException; 
import java.util.Enumeration; 
import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 
import android.os.Environment; 
import android.util.Log; 
import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 
import org.xmlpull.v1.XmlPullParserFactory; 
import org.xmlpull.v1.XmlSerializer; 
/** 
 * 配置信息類 
 * 新建日期:2014/12/8 by jdh 
 */ 
public class Config implements IF_Config { 
 //配置信息 
 private Config_Info config_info = new Config_Info(); 
 /** 
  * 構造函數 
  */ 
 public Config() { 
  boolean ok; 
  File sd_path; 
  File file_cfg_dir; 
  File file_cfg; 
  FileOutputStream out; 
  String str; 
  FileInputStream in; 
  //得到本機ip地址 
  config_info.local_ip = getLocalIpAddress(); 
  System.out.printf("本機ip:%s\n", config_info.local_ip); 
  //獲取SD卡目錄 
  sd_path = Environment.getExternalStorageDirectory(); 
  //判斷文件夾是否存在 
  file_cfg_dir = new File(sd_path.getPath() + "//Remote_Meeting");
  if (!file_cfg_dir.exists() && !file_cfg_dir.isDirectory()) { 
   System.out.println("配置文件夾Remote_Meeting不存在!"); 
   ok = file_cfg_dir.mkdirs(); 
   if (ok) { 
    System.out.println("創建文件夾成功!"); 
   } else { 
    System.out.println("創建文件夾失敗!");      
   } 
  } 
  //判斷配置文件是否存在 
  file_cfg = new File(file_cfg_dir.getPath(),"cfg.xml");
  if (!file_cfg.exists()) 
  { 
   System.out.println("配置文件cfg.xml不存在!");
   try { 
    file_cfg.createNewFile(); 
    System.out.println("創建文件cfg.xml成功!");
    //生成初始化的配置數據 
    try { 
     out = new FileOutputStream(file_cfg);
     //保存默認配置 
     config_info.title = "遠程視頻會見系統";
     config_info.local_port = 12600; 
     config_info.schedule_server_ip = "10.58.1.59";
     config_info.schedule_server_port = 12601;
     str = produce_xml_string(config_info);
     out.write(str.getBytes()); 
     out.close(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block
     e.printStackTrace(); 
    } 
   } catch (IOException e) { 
    // TODO Auto-generated catch block
    e.printStackTrace(); 
   } 
  } 
  config_info.title = "遠程"; 
  config_info.local_port = 126; 
  config_info.schedule_server_ip = "10.5";
  config_info.schedule_server_port = 12;
  System.out.printf("----222222222%s,%d,%s,%d\n",config_info.title,config_info.local_port,
  config_info.schedule_server_ip,config_info.schedule_server_port);
  //解析xml文件
  try {
   in = new FileInputStream(file_cfg);
   DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
   DocumentBuilder builder = factory.newDocumentBuilder();
   Document document = builder.parse(in);
   // 獲取根節點 
   Element root = document.getDocumentElement();
   NodeList node = root.getChildNodes(); 
   //獲得第1子節點:標題 
   config_info.title = node.item(0).getFirstChild().getNodeValue(); 
   //獲得第2子節點:本機端口 
   config_info.local_port = Integer.parseInt(node.item(1).getFirstChild().getNodeValue());
   //獲得第3子節點:調度服務器ip 
   config_info.schedule_server_ip = node.item(2).getFirstChild().getNodeValue(); 
   //獲得第4子節點:調度服務器端口 
   config_info.schedule_server_port = Integer.parseInt(node.item(3).getFirstChild().getNodeValue());  
   System.out.printf("----222222222%s,%d,%s,%d\n",config_info.title,config_info.local_port, 
     config_info.schedule_server_ip,config_info.schedule_server_port); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
 } 
 @Override 
 public Config_Info get_config_info() { 
  return config_info; 
 } 
 /** 
  * 得到本機ip地址 
  * @return 本機ip地址 
  */ 
 private String getLocalIpAddress() { 
  try { 
   for (Enumeration<NetworkInterface> en = NetworkInterface 
     .getNetworkInterfaces(); en.hasMoreElements();) { 
    NetworkInterface intf = en.nextElement(); 
    for (Enumeration<InetAddress> enumIpAddr = intf 
      .getInetAddresses(); enumIpAddr.hasMoreElements();) { 
     InetAddress inetAddress = enumIpAddr.nextElement(); 
     //if (!inetAddress.isLoopbackAddress()) { 
      if (!inetAddress.isLoopbackAddress() && !(inetAddress instanceof Inet6Address)) { 
      return inetAddress.getHostAddress().toString(); 
     } 
    } 
   } 
  } catch (SocketException ex) { 
   Log.e("WifiPreference IpAddress", ex.toString()); 
  } 
  return null; 
 } 
 /** 
  * 生成xml配置文件的String數據流 
  * Config_Info的本機ip信息不會保存 
  * @param info:配置信息 
  * @return xml的String數據流 
  */ 
 private String produce_xml_string(Config_Info info) { 
  StringWriter stringWriter = new StringWriter(); 
  try { 
   // 獲取XmlSerializer對象 
   XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); 
   XmlSerializer xmlSerializer = factory.newSerializer(); 
   // 設置輸出流對象 
   xmlSerializer.setOutput(stringWriter); 
   //開始標簽 
   xmlSerializer.startDocument("utf-8", true); 
   xmlSerializer.startTag(null, "config"); 
   //標題 
   xmlSerializer.startTag(null, "title"); 
   xmlSerializer.text(info.title); 
   xmlSerializer.endTag(null, "title"); 
   //本機端口 
   xmlSerializer.startTag(null, "local_port"); 
   xmlSerializer.text(Integer.toString(info.local_port)); 
   xmlSerializer.endTag(null, "local_port"); 
   //調度服務器ip 
   xmlSerializer.startTag(null, "schedule_service_ip"); 
   xmlSerializer.text(info.schedule_server_ip); 
   xmlSerializer.endTag(null, "schedule_service_ip"); 
   //調度服務器端口 
   xmlSerializer.startTag(null, "schedule_service_port"); 
   xmlSerializer.text(Integer.toString(info.schedule_server_port)); 
   xmlSerializer.endTag(null, "schedule_service_port"); 
   xmlSerializer.endTag(null, "config"); 
   xmlSerializer.endDocument(); 
  } catch (Exception e) { 
   e.printStackTrace(); 
  } 
  return stringWriter.toString(); 
 } 
}

希望本文所述對大家的Android程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved