您的位置:首页 > 移动开发 > Android开发

Android Java 如何读写XML文件

2015-03-23 17:58 417 查看
使用 XmlPullParserFactory 构建XmlSerializer,然后对XML文件进行写是相当容易的,基本的步骤详见下面代码:

package com.test.mytest;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer;

import android.content.Context;
import android.os.Environment;

public class MyTestClass2 {

private Writer mWriter;
private XmlSerializer mTestSuiteSerializer;
private static final String XML_FILE = "log.xml";

public void initialize(Context context) {
try {
String filepath = getTargetDir(context);
File fileRobo = new File(filepath);
if (!fileRobo.exists()) {
fileRobo.mkdir();
}

File resultFile = new File(filepath, XML_FILE);
startOutput(new FileWriter(resultFile));

} catch (IOException e) {
throw new RuntimeException(e);
}
}

/**
* Set the XML file start tag.
*/
private void startOutput(Writer writer) {
try {
mWriter = writer;
mTestSuiteSerializer = newSerializer(mWriter);
mTestSuiteSerializer.startDocument(null, null);
mTestSuiteSerializer.startTag(null, "Tag1");
} catch (Exception e) {
throw new RuntimeException(e);
}
}

/**
* Write content to the XML file.
* E.g.
* <?xml version='1.0' ?>
* <Tag1>
*     <MessageTag messageType="xxxx">message</MessageTag>
* </Tag1>
*
*/
public void startWrite(String messageType, String message) throws IOException {
mTestSuiteSerializer.startTag(null, "MessageTag");
mTestSuiteSerializer.attribute(null, "messageType", messageType);
mTestSuiteSerializer.text(message);
mTestSuiteSerializer.endTag(null, "MessageTag");
}

/**
* End write content to the XML file.
*/
public void endWrite() {
try {
mTestSuiteSerializer.endTag(null, "Tag1");
mTestSuiteSerializer.endDocument();
mTestSuiteSerializer.flush();
mWriter.flush();
mWriter.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}

/**
* Create the XML serializer for writing
*/
private XmlSerializer newSerializer(Writer writer) {
try {
XmlPullParserFactory pf = XmlPullParserFactory.newInstance();
XmlSerializer serializer = pf.newSerializer();
serializer.setOutput(writer);
return serializer;
} catch (Exception e) {
throw new RuntimeException(e);
}
}

/**
* Judge if SD card exists
*/
private boolean isSDCardAvaliable(){
return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
}

/**
* Get the file directory
*/
private String getTargetDir(Context context){
String packageName = "/" + context.getPackageName();
String filepath = context.getFilesDir().getPath() + packageName;
if (isSDCardAvaliable()) {
filepath = Environment.getExternalStorageDirectory().getAbsolutePath()+ packageName;
}
return filepath;
}
}


读取XML文件同样要用到XmlPullParserFactory,用其构建XmlPullParser来解析XML文件,示例如下:

package com.test.mytest;

import java.io.InputStream;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

import android.content.Context;
import android.util.Log;

public class MyTestClass3 {

public void startXmlPullParser (Context context) {

try {
// Open the XML file as InputStream
InputStream InputStream = context.getClass().getClassLoader().getResourceAsStream("log.xml");
// Get a XmlPullParser object
XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
// Set the file encoded type
parser.setInput(InputStream, "UTF-8");
// Read the file flag
int fileFlag = parser.getEventType();

while(fileFlag != XmlPullParser.END_DOCUMENT){
String nodeName = parser.getName();
switch (fileFlag) {
case XmlPullParser.START_TAG:
if(nodeName.equals("TAG1")){
Log.i("startXmlPullParser", "TAG1 = " + parser.nextText());
}
if(nodeName.equals("TAG2")){
Log.i("startXmlPullParser", "TAG2 = " + parser.nextText());
}
if(nodeName.equals("TAG3")){
Log.i("startXmlPullParser", "TAG3 = " + parser.nextText());
}
break;
case XmlPullParser.END_TAG:
default:
break;
}

// Get the next event type
fileFlag = parser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: