android編程之xml文件讀取和寫(xiě)入方法
本文實(shí)例講述了android編程之xml文件讀取和寫(xiě)入方法。分享給大家供大家參考。具體分析如下:
一、環(huán)境:
主機(jī):WIN8
開(kāi)發(fā)環(huán)境:Eclipse
二、說(shuō)明:
1.打開(kāi)sd卡中的xml文件,如果不存在,這新建一個(gè),并寫(xiě)入默認(rèn)配置
2.讀取xml文件
三、xml文件格式:
<?xml version="1.0" encoding="UTF-8" standalone="true"?> -<config> <title>遠(yuǎn)程視頻會(huì)見(jiàn)系統(tǒng)</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();
/**
* 構(gòu)造函數(shù)
*/
public Config() {
boolean ok;
File sd_path;
File file_cfg_dir;
File file_cfg;
FileOutputStream out;
String str;
FileInputStream in;
//得到本機(jī)ip地址
config_info.local_ip = getLocalIpAddress();
System.out.printf("本機(jī)ip:%s\n", config_info.local_ip);
//獲取SD卡目錄
sd_path = Environment.getExternalStorageDirectory();
//判斷文件夾是否存在
file_cfg_dir = new File(sd_path.getPath() + "http://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("創(chuàng)建文件夾成功!");
} else {
System.out.println("創(chuàng)建文件夾失敗!");
}
}
//判斷配置文件是否存在
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("創(chuàng)建文件cfg.xml成功!");
//生成初始化的配置數(shù)據(jù)
try {
out = new FileOutputStream(file_cfg);
//保存默認(rèn)配置
config_info.title = "遠(yuǎn)程視頻會(huì)見(jiàn)系統(tǒng)";
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 = "遠(yuǎn)程";
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);
// 獲取根節(jié)點(diǎn)
Element root = document.getDocumentElement();
NodeList node = root.getChildNodes();
//獲得第1子節(jié)點(diǎn):標(biāo)題
config_info.title = node.item(0).getFirstChild().getNodeValue();
//獲得第2子節(jié)點(diǎn):本機(jī)端口
config_info.local_port = Integer.parseInt(node.item(1).getFirstChild().getNodeValue());
//獲得第3子節(jié)點(diǎn):調(diào)度服務(wù)器ip
config_info.schedule_server_ip = node.item(2).getFirstChild().getNodeValue();
//獲得第4子節(jié)點(diǎn):調(diào)度服務(wù)器端口
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;
}
/**
* 得到本機(jī)ip地址
* @return 本機(jī)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數(shù)據(jù)流
* Config_Info的本機(jī)ip信息不會(huì)保存
* @param info:配置信息
* @return xml的String數(shù)據(jù)流
*/
private String produce_xml_string(Config_Info info) {
StringWriter stringWriter = new StringWriter();
try {
// 獲取XmlSerializer對(duì)象
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlSerializer xmlSerializer = factory.newSerializer();
// 設(shè)置輸出流對(duì)象
xmlSerializer.setOutput(stringWriter);
//開(kāi)始標(biāo)簽
xmlSerializer.startDocument("utf-8", true);
xmlSerializer.startTag(null, "config");
//標(biāo)題
xmlSerializer.startTag(null, "title");
xmlSerializer.text(info.title);
xmlSerializer.endTag(null, "title");
//本機(jī)端口
xmlSerializer.startTag(null, "local_port");
xmlSerializer.text(Integer.toString(info.local_port));
xmlSerializer.endTag(null, "local_port");
//調(diào)度服務(wù)器ip
xmlSerializer.startTag(null, "schedule_service_ip");
xmlSerializer.text(info.schedule_server_ip);
xmlSerializer.endTag(null, "schedule_service_ip");
//調(diào)度服務(wù)器端口
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();
}
}
希望本文所述對(duì)大家的Android程序設(shè)計(jì)有所幫助。
相關(guān)文章
android7.0實(shí)現(xiàn)分享圖片到朋友圈功能
這篇文章主要為大家詳細(xì)介紹了android7.0實(shí)現(xiàn)分享圖片到朋友圈功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android實(shí)現(xiàn)類似iOS分欄控制器
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)類似iOS分欄控制器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
PowerManagerService之喚醒鎖的使用獲取創(chuàng)建示例解析
這篇文章主要為大家介紹了PowerManagerService之喚醒鎖的使用獲取創(chuàng)建示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Android開(kāi)發(fā)中計(jì)算器的sin、cos及tan值計(jì)算問(wèn)題分析
這篇文章主要介紹了Android開(kāi)發(fā)中計(jì)算器的sin、cos及tan值計(jì)算問(wèn)題,結(jié)合實(shí)例形式分析了Android三角函數(shù)運(yùn)算中的弧度與角度計(jì)算問(wèn)題與相關(guān)解決方法,需要的朋友可以參考下2017-11-11
ImageView 實(shí)現(xiàn)Android colorPikcer 選擇器的示例代碼
本篇文章主要介紹了ImageView 實(shí)現(xiàn)Android colorPikcer 選擇器的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-10-10
Android仿微信圖片上傳帶加號(hào)且超過(guò)最大數(shù)隱藏功能
這篇文章給大家分享android仿照微信空間上傳圖片,顯示圖片數(shù)量以及超過(guò)最大,上傳按鈕隱藏功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2018-03-03
Android采取BroadcastReceiver方式自動(dòng)獲取驗(yàn)證碼
這篇文章主要介紹了Android采取BroadcastReceiver方式自動(dòng)獲取驗(yàn)證碼,感興趣的小伙伴們可以參考一下2016-08-08
Android實(shí)現(xiàn)簽名涂鴉手寫(xiě)板
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)簽名涂鴉手寫(xiě)板,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05

