Создать XML-файл и сохранить его во внутренней памяти Android

Я хочу проверить во внутренней памяти Android, если new.xml существует (который будет создан мной), тогда он должен вернуть мне дескриптор, и я легко смогу добавить к нему новые данные. Если его нет, создайте новый и добавьте в него данные.

Моя структура XML-файла будет такой простой.

<root>
    <record>a</record>
    <record>b</record>
    <record>c</record>
</root>

Если файл есть, я добавлю в него только новую запись. Но если этого не произойдет, я создам новый файл и добавлю к нему первую запись.

И как я смогу прочитать эти данные в arraylist, Пример с кодом был бы большим спасибо заранее.

3 ответа

Решение

Это довольно просто. это поможет вам:

  String filename = "file.txt";

    FileOutputStream fos;       

    fos = openFileOutput(filename,Context.MODE_APPEND);


    XmlSerializer serializer = Xml.newSerializer();
    serializer.setOutput(fos, "UTF-8");
    serializer.startDocument(null, Boolean.valueOf(true));
    serializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true);

    serializer.startTag(null, "root");

    for(int j = 0 ; j < 3 ; j++)
    {

        serializer.startTag(null, "record");

        serializer.text(data);

        serializer.endTag(null, "record");
    }
     serializer.endDocument();

     serializer.flush();

     fos.close();

чтобы прочитать данные с помощью DOM-парсера:

    FileInputStream fis = null;
    InputStreamReader isr = null;

    fis = context.openFileInput(filename);
    isr = new InputStreamReader(fis);
    char[] inputBuffer = new char[fis.available()];
    isr.read(inputBuffer);
    data = new String(inputBuffer);
    isr.close();
    fis.close();

    /*
     * converting the String data to XML format
     * so that the DOM parser understand it as an XML input.
     */
        InputStream is = new ByteArrayInputStream(data.getBytes("UTF-8"));

        ArrayList<XmlData> xmlDataList = new ArrayList<XmlData>();

    XmlData xmlDataObj;
    DocumentBuilderFactory dbf;
    DocumentBuilder db;
    NodeList items = null;
    Document dom;

    dbf = DocumentBuilderFactory.newInstance();
    db = dbf.newDocumentBuilder();
    dom = db.parse(is);
    // normalize the document
    dom.getDocumentElement().normalize();

    items = dom.getElementsByTagName("record");

    ArrayList<String> arr = new ArrayList<String>();

    for (int i=0;i<items.getLength();i++){

        Node item = items.item(i);

         arr.add(item.getNodeValue());

    }               

Используйте openFileOutput для создания файла во внутреннем хранилище и getFileStreamPath для проверки, если они уже существуют, и работы с ними.

Чтобы прочитать данные в массив, просто откройте поток файлов и используйте любой подходящий XML-парсер

Используйте getFilesDir(), чтобы получить путь, по которому вы можете создавать файлы. Проверьте, существует ли файл, создав файловый объект File newXml = new File(getFilesDir+"/new.xml"), Затем проверьте, существует ли он, используя if(newXml.exists()),

Чтобы проанализировать данные, обратитесь к документации разработчика. Как видно из примера XmlPullParser, он может возвращать список.

Другие вопросы по тегам