Jeder Entwickler von Android Apps steht irgendwann vor der Aufgabe, Daten zu speichern und Android bietet hier eine Reihe von Möglichkeiten, die Vorteile und Nachteile haben. Hier mal die Top 3 Möglichkeiten, Daten in einer App zu speichern.
- SQLite Datenbank
- SharedPreferences
- Dateien im Dateisystem
Entscheidet man sich dafür, mit Dateien im Dateisystem zu arbeiten, stellt sich direkt die Frage, wie kann ich auf das Dateisystem zugreifen und welche Einschränkungen gibt es hier?
Der Zugriff auf das Dateisystem erfolgt mit Hilfe der Java.io Klassen, wie man es aus der klassischen Java Entwicklung kennt. Es gibt den FileInputStream, den FileOutputStream, die File Klasse und vieles mehr.
Hier mal ein kleines Beispiel: (Ungetestet)
String defaultDataDir = "/data/data/" + getPackageName(); String filename = defaultDataDir + "/text.txt"; FileOutputStream out = new FileOutputStream(filename); byte[] buffer = (“Dies ist ein Test“).getBytes(); out.write(buffer); out.flush(); out.close();
In diesem Beispiel wird die Datei im sog. „Default Data Directory” angelegt. Das ist ein besonderes Verzeichnis, auf das nur diese Applikation zugreifen darf. Erfordert es die Anforderung, dass man die Daten an anderer Stelle ablegen muss, ist dies auch möglich. Allerdings muss man der App dann die Berechtigung WRITE_EXTERNAL_STORAGE zuweisen. Dies erfolgt über einen Eintrag im AndroidManifest.
Wenn die App die WRITE_EXTERNAL_STORAGE Berechtigung besitzt, heißt das aber noch lange nicht, dass es möglich ist, unbegrenzt auf den Speicher zuzugreifen. Sowohl der lesende als auch der Schreibzugriff ist nur im „/sdcard/„ Verzeichnis möglich. Für alles weitere benötigt man ein gerootetes Gerät. Aber als App Entwickler kann man in den meisten Fällen nicht davon ausgehen, dass die Nutzer ein gerootetes Android Device haben.
Oft verwendete Verzeichnisse im Default Data Directory sind:
- databases/: SQLite Datenbanken werden meistens hier angelegt
- lib/: Bibliotheken und andere Tools kommen hier hin
- shared_prefs/: In dem Verzeichnis werden die SharedPreferences gespeichert
- files/: Sonstiges
- cache/: Der App Cache
Diese Struktur des App Home Verzeichnisses kann nach Belieben erweitert werden. Das Verzeichnis ist vergleichbar mit einem Linux User Home Verzeichnisses. Die App ist der User und hat die Hoheit über die Dateien und Verzeichnisse.
Fazit
Das Lesen und Schreiben von Dateien ist sehr einfach möglich. Allerdings sollte man die Entscheidung über den Speicherort nicht voreilig treffen. Anwendungsdateien, die man mit anderen Apps teilt, sollten auf der sdcard gespeichert werden. Sensible Daten, die nur aus der eigenen App heraus zugreifbar sein sollen, sollten auf jeden Fall im Default Data Directory gespeichert werden.
Hinweis: Auch das „Default Data Directory“ ist nicht 100% sicher gegenüber dem Zugriff von außen. Bei gerooteten Geräten gibt es keine Einschränkungen mehr. So kann man mit einem gerooteten Android Habdy/Tablet und dem entsprechenden Know How auch auf das Default Data Directory jeder beliebigen App zugreifen. Daher ist dies auf keinen Fall der richtige Ort, um z.B. Passwörter oder Kreditkartendaten unverschlüsselt abzulegen.