2012-07-27 10 views
11

Chcę sprawdzić w pamięci wewnętrznej Android, czy istnieje new.xml (który zostanie utworzony przeze mnie), to powinien mi zwrócić uchwyt i może być łatwo dołączyć nowe dane. Jeśli nie istnieje, utwórz nowy i dodaj do niego dane.Utwórz plik xml i zapisz go w pamięci wewnętrznej android

Moja struktura plików XML będzie prosta.

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

Jeśli plik jest tam dodam nowy rekord tylko it.But jeśli nie, niż będę utworzyć nowy plik i dodać do niego pierwszy rekord.

I jak będę w stanie odczytać te dane w arraylist. Przykład z kodem byłby wielki z góry dzięki.

Odpowiedz

13

Jest raczej prosty. to pomoże:

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

czytać powrotem dane przy użyciu DOM parsera:

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

Tak więc nie ma żadnego 'serializer.endTag (null," root ");'? –

0

Użyj opcji getFilesDir(), aby uzyskać ścieżkę do miejsca, w którym można tworzyć pliki. Sprawdź, czy plik istnieje, tworząc obiekt pliku File newXml = new File(getFilesDir+"/new.xml"). Następnie sprawdź, czy istnieje, używając if(newXml.exists()).

Aby przeanalizować dane, zapoznaj się z dev docs. Jak widać w przykładzie XmlPullParser, może zwrócić listę.

+0

jak dołączyć dane do istniejącego pliku? – Mj1992

+0

Dobrze się przyjrzyjcie dobrze, zanim zapytacie tutaj. Sprawdź http://stackoverflow.com/questions/5059296/how-to-append-an-xml-file-in-android –

+0

thnx za pomoc. – Mj1992

0

Zastosowanie openFileOutput stworzyć plik w pamięci wewnętrznej i getFileStreamPath do sprawdzania, czy już istnieje i pracuje z nimi

Aby odczytać dane do tablicy tylko strumień otwartego pliku i użyć dowolnego odpowiedniego XML parser

+0

jak dołączyć dane do istniejącego pliku – Mj1992

+0

Uzyskaj plik za pomocą getFileStreamPath, sprawdź, czy istnieje, otwórz FileOutputStream i napisz swoje dane do strumienia –

Powiązane problemy