Создать 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, он может возвращать список.