14

I want to check in the android internal storage if new.xml exists(which will be created by me) then it should return me a handle for it and i may be easily able to append new data to it.If it doesn't exists create a new one and add data to it.

My xml file structure will be simple like this.

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

If the file is there I will only add a new record to it.But if doesn't than I will create a new file and add the first record to it.

And How I will be able to read this data in an arraylist. An example with code would be great thanks in advance.

Mj1992
  • 3,404
  • 13
  • 63
  • 102

3 Answers3

18

It's rather simple. This will help you:

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();

To read back data using DOM parser:

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 understands 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());
}
Johannes
  • 377
  • 1
  • 5
  • 16
Vikram Gupta
  • 6,496
  • 5
  • 34
  • 47
0

Use getFilesDir() to get the path to where you can create files. Check if the file exists by creating a file object File newXml = new File(getFilesDir+"/new.xml"). Then check if it exists using if(newXml.exists()).

To parse the data, refer dev docs . As you can see in the XmlPullParser example, it can return a list.

Aswin Kumar
  • 5,158
  • 5
  • 34
  • 39
0

Use openFileOutput to create file in internal storage and getFileStreamPath for checking if they already exists and working with them

To read data into array just open file stream and use any appropriate XML parser

Dmitriy Tarasov
  • 1,949
  • 20
  • 37