Android Java 如何读写XML文件

使用 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();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值