创建XML文件并将其保存在Android的内部存储中

14

我想在安卓内部存储中检查是否存在new.xml(这将由我创建),如果存在,则应该为我返回它的句柄,以便我可以轻松地向其添加新数据。如果不存在,则创建一个新的并添加数据。

我的xml文件结构将简单如下。

<root>
    <record>a</record>
    <record>b</record>
    <record>c</record>
</root>
如果文件已存在,我只会在其中添加一条新记录。但如果文件不存在,则会创建一个新文件并在其中添加第一条记录。
我该如何将这些数据读取到arraylist中。最好附带代码示例,谢谢。
3个回答

18

这很简单,以下内容将对你有所帮助:

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

那么就没有 serializer.endTag(null, "root"); 了吗? - Dan Chaltiel

0
使用 getFilesDir() 获取可以创建文件的路径。通过创建文件对象 File newXml = new File(getFilesDir+"/new.xml") 来检查文件是否存在。然后使用 if(newXml.exists()) 进行检查。
要解析数据,请参考 dev docs 。正如您在 XmlPullParser 示例中看到的那样,它可以返回一个列表。

如何将数据追加到现有文件中? - Mj1992
请在此提问前进行充分的研究。请查看http://stackoverflow.com/questions/5059296/how-to-append-an-xml-file-in-android。 - Aswin Kumar

0

使用openFileOutput在内部存储中创建文件,使用getFileStreamPath检查它们是否已经存在并与它们一起工作

要将数据读入数组中,只需打开文件流并使用任何适当的XML解析器即可。


如何将数据追加到现有文件中? - Mj1992
通过getFileStreamPath获取文件,检查其是否存在,打开FileOutputStream并将数据写入流中。 - Dmitriy Tarasov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接