android编程之xml文件读取和写入方法

时间:2022-09-17 09:28:59

本文实例讲述了android编程之xml文件读取写入方法。分享给大家供大家参考。具体分析如下:

一、环境:

主机:WIN8
开发环境:Eclipse

二、说明:

1.打开sd卡中的xml文件,如果不存在,这新建一个,并写入默认配置
2.读取xml文件

三、xml文件格式:

?
1
2
3
4
5
6
7
<?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>

四、源代码:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
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程序设计有所帮助。