简体   繁体   English

创建xml文件并将其保存在内部存储android中

[英]Create xml file and save it in internal storage android

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. 我想检查android内部存储器是否存在new.xml (将由我创建)然后它应该为我返回一个句柄,我可以很容易地向它添加新数据。如果它不存在创建一个新的并向其添加数据。

My xml file structure will be simple like this. 我的xml文件结构就像这样简单。

<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 . 以及如何在arraylist读取这些数据。 An example with code would be great thanks in advance. 代码的一个例子非常感谢提前。

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

Use getFilesDir() to get the path to where you can create files. 使用getFilesDir()获取可以创建文件的路径。 Check if the file exists by creating a file object File newXml = new File(getFilesDir+"/new.xml") . 通过创建文件对象File newXml = new File(getFilesDir+"/new.xml")检查文件是否存在。 Then check if it exists using if(newXml.exists()) . 然后使用if(newXml.exists())检查它是否存在。

To parse the data, refer dev docs . 要解析数据,请参阅dev docs As you can see in the XmlPullParser example, it can return a list. 正如您在XmlPullParser示例中所看到的,它可以返回一个列表。

Use openFileOutput to create file in internal storage and getFileStreamPath for checking if they already exists and working with them 使用openFileOutput在内部存储中创建文件,使用getFileStreamPath检查它们是否已存在并使用它们

To read data into array just open file stream and use any appropriate XML parser 要将数据读入数组,只需打开文件流并使用任何适当的XML解析器

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM