Read/write to external XML file in Android

后端 未结 3 1815
栀梦
栀梦 2020-12-08 12:01

I\'m trying to learn more about reading/writing to an XML-file (as a kind of database) in Android. I can\'t seem to find anything about this so I guess I don\'t know what te

相关标签:
3条回答
  • 2020-12-08 12:35

    Here is the code to write to XML file:

    final String xmlFile = "userData";
    String userNAme = "username";
    String password = "password";
    try {
        FileOutputStream fos = new  FileOutputStream("userData.xml");
        FileOutputStream fileos= getApplicationContext().openFileOutput(xmlFile, Context.MODE_PRIVATE);
        XmlSerializer xmlSerializer = Xml.newSerializer();              
        StringWriter writer = new StringWriter();
        xmlSerializer.setOutput(writer);
        xmlSerializer.startDocument("UTF-8", true);
        xmlSerializer.startTag(null, "userData");
        xmlSerializer.startTag(null, "userName");
        xmlSerializer.text(username_String_Here);
        xmlSerializer.endTag(null, "userName");
        xmlSerializer.startTag(null,"password");
        xmlSerializer.text(password_String);
        xmlSerializer.endTag(null, "password");             
        xmlSerializer.endTag(null, "userData");
        xmlSerializer.endDocument();
        xmlSerializer.flush();
        String dataWrite = writer.toString();
        fileos.write(dataWrite.getBytes());
        fileos.close();
    }
    catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IllegalStateException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    

    and to read data from XML File the do as below:

    final String xmlFile = "userData";
    ArrayList<String> userData = new ArrayList<String>();
    try {
        fis = getApplicationContext().openFileInput(xmlFile);
        isr = new InputStreamReader(fis);
        inputBuffer = new char[fis.available()];
        isr.read(inputBuffer);
        data = new String(inputBuffer);
        isr.close();
        fis.close();
    }
    catch (FileNotFoundException e3) {
        // TODO Auto-generated catch block
        e3.printStackTrace();
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    XmlPullParserFactory factory = null;
    try {
        factory = XmlPullParserFactory.newInstance();
    }
    catch (XmlPullParserException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
    factory.setNamespaceAware(true);
    XmlPullParser xpp = null;
    try {
        xpp = factory.newPullParser();
    }
    catch (XmlPullParserException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
    try {
        xpp.setInput(new StringReader(data));
    }
    catch (XmlPullParserException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    int eventType = 0;
    try {
        eventType = xpp.getEventType();
    }
    catch (XmlPullParserException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    while (eventType != XmlPullParser.END_DOCUMENT){
        if (eventType == XmlPullParser.START_DOCUMENT) {
            System.out.println("Start document");
        }
        else if (eventType == XmlPullParser.START_TAG) {
            System.out.println("Start tag "+xpp.getName());
        }
        else if (eventType == XmlPullParser.END_TAG) {
            System.out.println("End tag "+xpp.getName());
        }
        else if(eventType == XmlPullParser.TEXT) {
            userData.add(xpp.getText());
        }
        try {
            eventType = xpp.next();
        }
        catch (XmlPullParserException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    String userName = userData.get(0);
    String password = userData.get(1);
    
    0 讨论(0)
  • 2020-12-08 12:41

    To create new file in /storage/sdcard0/your_app_name/ use following:

    File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + "your_app_name" + "/" + xmlFile);
            file.createNewFile();
            FileOutputStream fileos = new FileOutputStream(file);
    
    0 讨论(0)
  • 2020-12-08 12:55
    public class SkillsParser implements AssyncXmlReader {
    
        private String ns = "";
        @Override
        public Object parse(InputStream in) throws XmlPullParserException,
                IOException {
            try {
                XmlPullParser parser = Xml.newPullParser();
                parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
                parser.setInput(in, null);
                parser.nextTag();
                return readSkills(parser);
            } finally {
                in.close();
            }
        }
    
        private Object readSkills(XmlPullParser parser) throws XmlPullParserException, IOException {
            parser.require(XmlPullParser.START_TAG, ns, "skills");
            List<ESkill> skills = new ArrayList<ESkill>();
            
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                // Starts by looking for the entry tag
                if (name.equals("skill")) {
                    skills.add(readSkill(parser));
                } else {
                    skip(parser);
                }
            }  
            return skills;
        }
        
        private ESkill readSkill(XmlPullParser parser) throws XmlPullParserException, IOException {
            /*
            <skill>
                <name>Software Engineering</name>
            
            </skill>
            */
            String skill_name = "";
            
            while (parser.next() != XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                if ("name".equals(name)) {
                    skill_name = readName(parser);
                } else {
                    skip(parser);
                }
            }
            
            return new ESkill().setSkill(skill_name);
        }
        
        // Processes title tags in the feed.
        private String readName(XmlPullParser parser) throws IOException, XmlPullParserException {
            parser.require(XmlPullParser.START_TAG, ns, "name");
            String description = readText(parser);
            parser.require(XmlPullParser.END_TAG, ns, "name");
            return description;
        }
        
        // For the tags title and summary, extracts their text values.
        private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
            String result = "";
            if (parser.next() == XmlPullParser.TEXT) {
                result = parser.getText();
                parser.nextTag();
            }
            return result;
        }
        
        private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                throw new IllegalStateException();
            }
            int depth = 1;
            while (depth != 0) {
                switch (parser.next()) {
                case XmlPullParser.END_TAG:
                    depth--;
                    break;
                case XmlPullParser.START_TAG:
                    depth++;
                    break;
                }
            }
         }
    }
    
    0 讨论(0)
提交回复
热议问题