Android Tutorial Mit Text Dateien arbeiten

klaus

Expert
Licensed User
Longtime User
Viele Programme brauchen eine dauerhafte Speicherung. Die zwei meist gebrauchte Speicherarten sind Dateien und Datenbanken.
In diesem Tutorial werden wir Textdateien erläutern.

Das vordefinierte File Objekt hat mehrere Methoden (Funktionen) die das Handeln mit Textdateien sehr erleichtern.

Files locations – Es gibt einige bedeutende Stellen wo man Dateien speichern oder lesen kann.

File.DirAssets
Der Assets Ordner beinhaltet alle Dateien die mit dem Dateimanager zugefügt wurden. Diese Dateien sind nur lesbar (read only). Man kann keine neue Dateien in diesen Ordner hinzufügen (er ist in der apk Datei eingebunden).

File.DirInternal / File.DirInternalCache
Diese beiden Ordner sind im Hauptspeicher und sind ausschliesslich für Ihr Programm begrenzt. Andere Programme haben keinen Zugriff auf Dateien in diesen Ordnern.
Der Cache Ordner kann durch das Betriebssystem (OS) gelöscht werden falls es mehr Speicherplatz braucht.

File.DirRootExternal
Wurzelordner der Speicherkarte.

File.DirDefaultExternal
Default Ordner für Ihr Programm in der Speicherkarte.
Der Ordner ist:<Speicherkarte>/Android/data/<package>/files/
Er wird, falls nötig, erzeugt.

Wenn man eine von diesen Beiden Properties (Eigenschaften) aufruft wird automatisch die EXTERNAL_STORAGE Erlaubnis für Ihr Programm hinzugefügt.

Tipp: Man kann mit File.ExternalReadable und File.ExternalWritable nachprüfen ob eine Speicherkarte existiert und ob sie zur Verfügung steht.

File.ExternalReadable und File.ExternalWritable.


Das vordefinierte File Objekt (vordefiniert heisst dass man es nicht extra deklarieren braucht) beinhaltet mehrere Methoden um in Dateien zu schreiben und lesen.
Man kann es mit TextReader und TextWriter auch manuell machen.
TextReader und TextWriter sind nicht nur auf Textdateien begrenzt, man kann sie auch mit Anderen Streams benutzen.

TextReader und TextWriter haben einen Vorteil über File read/write Methoden wenn man mit grossen Dateien arbeitet. Die Filemethoden lesen die Dateien komplett und speichern deren Inhalt in den Speicher. In vielen Fällen ist dies die praktischste Lösung, jedoch wenn man mit sehr grossen Dateien arbeitet (mehr als 1 – 2 Mbytes) ist es vorteilhafter mit TextReader oder TextWriter zu arbeiten.

File.WriteString – Schreibt den gegebenen Text in eine neue Datei.
File.ReadString –Liest eine Datei in eine String Variable.
File.WriteList – Schreibt alle Werte einer Liste in eine Datei. Jeder Eintrag wird in seine eigene Zeile geschrieben.
Wenn ein Eintrag 'neue Zeile' (new line) Buchstaben enthält wird der Eintrag über mehrere Zeilen geschrieben, aber wenn man ihn zurück list wird er als mehrere Einträge behandelt.

File.ReadList – Liest eine Datei und speichert jede Zeile als ein Eintrag in der Liste.
File.WriteMap – Nimmt ein Map Objekt das ein Paar Werte enthält (Schlüssel und Wert) und speichert sie in eine Text Datei. Das Dateiformat ist unter 'Java Properties file' bekannt: .properties - Wikipedia, the free encyclopedia
Das Dateiformat ist nicht zu kompliziert da man es sehr leicht von Hand editieren kann.
Eine übliche Verwendung von File.WriteMap ist das speichern von Konfigurationsdaten (settings) in eine Datei.
File.ReadMap – Liest eine 'Property' Datei und schreibt die Schlüssel/Wert Paare in ein Map Objekt. Achtung: Die Reihenfolge der Werte kann verschieden sein als die Originalreihenfolge.

Beispiel:
B4X:
Sub Process_Globals
 
End Sub
 
Sub Globals
 
End Sub
 
Sub Activity_Create(FirstTime As Boolean)
    If File.ExternalWritable = False Then
        Msgbox("Cannot write on storage card.", "")
        Return
    End If
    SaveStringExample
    ReadStringExample
 
    WriteListExample
    ReadListExample
 
    WriteMapExample
    ReadMapExample
 
    WriteTextWriter
    ReadTextReader
End Sub
 
Sub SaveStringExample
    File.WriteString(File.DirRootExternal, "String.txt", _
        "This is some string" & CRLF & "and this is another one.")
End Sub
 
Sub ReadStringExample
    Msgbox(File.ReadString(File.DirRootExternal, "String.txt"), "")
End Sub
 
Sub WriteListExample
    Dim List1 As List
    List1.Initialize
    For i = 1 To 100
        List1.Add(i)
    Next
    File.WriteList(File.DirRootExternal, "List.txt", List1)
End Sub
 
Sub ReadListExample
    Dim List1 As List
    'We are not initializing the list because it just holds the list that returns from File.ReadList
    List1 = File.ReadList(File.DirRootExternal, "List.txt")
    Msgbox("List1.Size = " & List1.Size & CRLF & "The third item is: " & List1.Get(2), "")
End Sub
 
Sub WriteMapExample
    Dim Map1 As Map
    Map1.Initialize
    For i = 1 To 10
        Map1.Put("Key" & i, "Value" & i)
    Next
    File.WriteMap(File.DirRootExternal, "Map.txt", Map1)
End Sub
 
Sub ReadMapExample
    Dim Map1 As Map
    'Again we are not initializing the map.
    Map1 = File.ReadMap(File.DirRootExternal, "Map.txt")
    'Append all entries to a string builder
    Dim sb As StringBuilder
    sb.Initialize
    sb.Append("The map entries are:").Append(CRLF)
    For i = 0 To Map1.Size - 1
        sb.Append("Key = ").Append(Map1.GetKeyAt(i)).Append(", Value = ")
        sb.Append(Map1.GetValueAt(i)).Append(CRLF)
    Next
    Msgbox(sb.ToString,"")
End Sub
 
Sub WriteTextWriter
    Dim TextWriter1 As TextWriter
    TextWriter1.Initialize(File.OpenOutput(File.DirRootExternal, "Text.txt", False))
    For i = 1 To 10
        TextWriter1.WriteLine("Line" & i)
    Next
    TextWriter1.Close
End Sub
 
Sub ReadTextReader
    Dim TextReader1 As TextReader
    TextReader1.Initialize(File.OpenInput(File.DirRootExternal, "Text.txt"))
    Dim line As String
    line = TextReader1.ReadLine    
    Do While line <> Null
        Log(line) 'write the line to LogCat
        line = TextReader1.ReadLine
    Loop
    TextReader1.Close
End Sub
 
Last edited:
Top