Welcome

首页 / 移动开发 / Android / android编程之xml文件读取和写入方法

本文实例讲述了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
", 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 blocke.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
",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子节点:调度服务器ipconfig_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
",config_info.title,config_info.local_port,config_info.schedule_server_ip,config_info.schedule_server_port); } catch (Exception e) {e.printStackTrace(); }}@Overridepublic 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");//调度服务器ipxmlSerializer.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程序设计有所帮助。