2012-07-27 24 views
11

Quiero verificar en el almacenamiento interno de Android si new.xml existe (que será creado por mí), entonces debería devolverme un identificador y puedo anexarlo fácilmente datos nuevos. Si no existe, cree uno nuevo y añádalo.Crear el archivo xml y guardarlo en el almacenamiento interno de android

Mi estructura de archivos xml será así de simple.

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

Si el archivo no es tan sólo añadirá un nuevo registro a it.But si lo hace no lo voy a crear un nuevo archivo y añadir el primer registro a la misma.

Y cómo podré leer esta información en un arraylist. Un ejemplo con código sería genial gracias de antemano.

Respuesta

13

Es bastante sencillo. esto le ayudará a:

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

volver a leer los datos utilizando DOM analizador:

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

    }    
+0

Entonces no hay 'serializer.endTag (null," root ");'? –

0

Utilice getFilesDir() para obtener la ruta hacia donde puede crear archivos. Compruebe si el archivo existe creando un objeto de archivo File newXml = new File(getFilesDir+"/new.xml"). Luego verifique si existe usando if(newXml.exists()).

Para analizar los datos, consulte dev docs. Como puede ver en el ejemplo de XmlPullParser, puede devolver una lista.

+0

cómo anexar los datos en el archivo existente? – Mj1992

+0

Amablemente investigue bien antes de preguntar aquí. Consulte http://stackoverflow.com/questions/5059296/how-to-append-an-xml-file-in-android –

+0

thnx para obtener ayuda. – Mj1992

0

Uso openFileOutput Para crear el archivo de almacenamiento interno y getFileStreamPath para comprobar si ya existe y trabajar con ellos

Para leer los datos en un array, simplemente secuencia de archivo abierto y utilizar cualquier analizador XML adecuada

+0

cómo anexar los datos a un archivo existente – Mj1992

+0

Obtener archivo a través de getFileStreamPath, verificar que exista, abrir FileOutputStream y escribir sus datos en la corriente –

Cuestiones relacionadas