Android里面操作xml文件主要有三种方式:

SAX方式,DOM方式,PULL方式。据说因为DOM的方式比较耗内存,而手机最纠结的就是存储空间小的问题,所以在Android里面不提倡使用DOM的方式。而SAX方式和PULL方式的思想比较的相似,原理似乎是同出一则的,实现的思想好像是读取字符串的每一个单词一样,每读取一段就判断读取的是什么内容然后执行相应的方法,直至文件的结尾。

本文的例子主要采用PULL方式读写xml,废话不多说,直接上代码。

xml文件如下

<persons> <person> <name>北京</name> <number>123324324</number> </person> <person> <name>东坡</name> <number>1-591-992-5643</number> </person> <person> <name>俊伟</name> <number>1-379-784-7916</number> </person> </persons>



读xml的代码:

public static boolean readFixedNumbersFromXml() { XmlPullParser xmlParser = Xml.newPullParser(); File file = new File(LISTENED_NUMBERS_FILE); if (!file.exists()) { Log.d(TAG, "file :" + LISTENED_NUMBERS_FILE + " is not exist, create it!"); return false; } int eventType = 0; try { FileInputStream fis = new FileInputStream(file); xmlParser.setInput(fis, "UTF-8"); eventType = xmlParser.getEventType(); ListenInfoManager.ListenedPerson person = null; while (eventType != XmlPullParser.END_DOCUMENT) { Log.d(TAG, "eventType=" + eventType); switch (eventType) { case XmlPullParser.START_DOCUMENT: break; case XmlPullParser.START_TAG: Log.d(TAG, "name=" + xmlParser.getName()); if ("person".equals(xmlParser.getName())) { person = new ListenInfoManager.ListenedPerson(); } if ("name".equals(xmlParser.getName())) { if (person != null) { person.setName(xmlParser.nextText()); } } if ("number".equals(xmlParser.getName())) { if (person != null) { person.setNumber(xmlParser.nextText()); } } break; case XmlPullParser.END_TAG: if ("person".equals(xmlParser.getName())) { Log.d(TAG, "name:" + xmlParser.getName() + ", person=" + person); ListenInfoManager.self().addToCustomNumberList(person); person = null; } break; default: break; } eventType = xmlParser.next(); } } catch (FileNotFoundException e) { Log.d(TAG, "file not found exception!"); e.printStackTrace(); } catch (XmlPullParserException e) { Log.d(TAG, "XmlPullParserException!"); e.printStackTrace(); } catch (IOException e) { Log.d(TAG, "IOException!"); e.printStackTrace(); } return true; }

写xml代码如下:
public static boolean writeFixedNumbersToXmlFile() {        FileOutputStream fos = null;        File file = new File(LISTENED_NUMBERS_FILE_PATH);        if (!file.exists()) {            file.mkdirs();        }        try {            file = new File(LISTENED_NUMBERS_FILE);            if (!file.createNewFile()) {                Log.d(TAG, "file already exist!");                file.delete();                if (!file.createNewFile()) {                    Log.d(TAG, "Create file failed!");                    return false;                }            }        } catch (IOException e) {            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.            Log.d(TAG, "create xml file failed!");        }        try {            fos = new FileOutputStream(file);        } catch (FileNotFoundException e) {            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.            return false;        }        XmlSerializer serializer = Xml.newSerializer();        try {            serializer.setOutput(fos, "UTF-8");            //缩进            serializer.setFeature(                    "http://xmlpull.org/v1/doc/features.html#indent-output",                    true);            serializer.startDocument("UTF-8", true);            serializer.startTag(null, "persons");            for (ListenedPerson person : ListenInfoManager.self().getCustomNumberList()) {                serializer.startTag(null, "person");                serializer.startTag(null, "name");                serializer.text(person.getName());                serializer.endTag(null, "name");                serializer.startTag(null, "number");                serializer.text(person.getNumber());                serializer.endTag(null, "number");                serializer.endTag(null, "person");            }            serializer.endTag(null, "persons");            serializer.endDocument();            fos.flush();            fos.close();        } catch (IOException e) {            e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.            Log.d(TAG, "IOException write xml file failed!");            return false;        } catch (Exception e) {            e.printStackTrace();            Log.d(TAG, "Exception write xml file failed!");            return false;        }        return true;    }





更多相关文章

  1. 如何使用Android Studio打开一个App项目,导入Android App项目需要
  2. Android应用程序如何访问/sys和/proc等目录下的系统文件
  3. [Android Studio 权威教程]Android Studio 三种添加插件的方式
  4. android使用webview预览png,pdf,doc,xls,txt,等文件
  5. Socket 通信原理(Android客户端和服务器以TCP&&UDP方式互通)
  6. Android读取工程内嵌资源文件的两种方法
  7. Android 共享内存实现跨进程大文件传输(设计思路和Demo实现绕过B
  8. Android旅游APP类项目源代码
  9. 关于android图片的传输,android图片传输方式,xml传输图片,android

随机推荐

  1. Android根据内网外网连接情况配置服务器
  2. 【转】Android -- 探究Android的多分辨率
  3. 拥抱Android之前世今生
  4. Android(安卓)修改现有ROM资源文件如何实
  5. Android实现ssl双向验证
  6. Android日志输出
  7. 饿了么点餐源码、今日头条源码 等
  8. Android进度条ProgressBar颜色的渐变设置
  9. iOS Tableview侧滑删除和移动cell的实现
  10. 【 Android(安卓)】RecyclerView 使用方