Android Tutorial: Nutzung des Internen Speichers zur Datenverwaltung
In diesem Beitrag schauen wir uns den internen Speicher von Android an. Android bietet verschiedene strukturierte Möglichkeiten, Daten zu speichern. Dazu gehören:
-
- Shared Preferences
- Interner Speicher
- Externer Speicher
- SQLite Speicher
- Netzwerkverbindungsspeicher (Cloud)
Android Interner Speicher
Der interne Speicher von Android ist der Bereich für private Daten auf dem Gerätespeicher. Standardmäßig sind gespeicherte und geladene Dateien im internen Speicher nur für die Anwendung sichtbar und andere Anwendungen haben keinen Zugriff darauf. Wenn der Benutzer die Anwendung deinstalliert, werden die damit verbundenen Dateien ebenfalls entfernt. Beachten Sie jedoch, dass einige Benutzer ihre Android-Telefone rooten und damit Superuser-Zugriff erhalten, wodurch sie alle Dateien lesen und schreiben können.
Lesen und Schreiben von Textdateien im internen Speicher
Android bietet die Methoden openFileInput
und openFileOutput
aus den Java I/O-Klassen, um Lese- und Schreibströme zu lokalen Dateien zu verwalten.
-
-
- openFileOutput(): Diese Methode wird verwendet, um eine Datei zu erstellen und zu speichern. Die Syntax lautet:
FileOutputStream fOut = openFileOutput("dateiname", Context.MODE_PRIVATE);
Diese Methode gibt eine Instanz von
FileOutputStream
zurück. Anschließend kann diewrite
-Methode aufgerufen werden, um Daten in die Datei zu schreiben:String str = "Testdaten"; fOut.write(str.getBytes()); fOut.close();
- openFileInput(): Diese Methode wird verwendet, um eine Datei zu öffnen und zu lesen. Sie gibt eine Instanz von
FileInputStream
zurück. Die Syntax lautet:
FileInputStream fin = openFileInput("dateiname");
Anschließend kann die
read
-Methode aufgerufen werden, um Zeichen für Zeichen aus der Datei zu lesen:int c; String temp = ""; while ((c = fin.read()) != -1) { temp += Character.toString((char) c); } fin.close();
In diesem Code enthält die Variable
temp
alle Daten der Datei.
- openFileOutput(): Diese Methode wird verwendet, um eine Datei zu erstellen und zu speichern. Die Syntax lautet:
-
Beachten Sie: Diese Methoden akzeptieren keine Dateipfade (z.B. path/to/file.txt), sondern nur einfache Dateinamen.
Beispiel für ein Android-Projekt zur Nutzung des internen Speichers
Die XML-Layoutdatei (activity_main.xml
) enthält ein EditText
-Feld zum Schreiben von Daten in die Datei sowie einen Schreib- und einen Lesebutton. Die
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Android Read and Write Text from/to a File"
android:textStyle="bold"
android:textSize="28sp" />
<EditText
android:id="@+id/editText1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textView1"
android:minLines="5">
<requestFocus />
</EditText>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Write Text into File"
android:onClick="WriteBtn" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read Text From file"
android:onClick="ReadBtn" />
</RelativeLayout>
Die MainActivity
enthält die Implementierung des Lese- und Schreibvorgangs:
package com.journaldev.internalstorage;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class MainActivity extends Activity {
EditText textmsg;
static final int READ_BLOCK_SIZE = 100;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textmsg = (EditText) findViewById(R.id.editText1);
}
public void WriteBtn(View v) {
try {
FileOutputStream fileout = openFileOutput("mytextfile.txt", MODE_PRIVATE);
OutputStreamWriter outputWriter = new OutputStreamWriter(fileout);
outputWriter.write(textmsg.getText().toString());
outputWriter.close();
Toast.makeText(getBaseContext(), "File saved successfully!", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
public void ReadBtn(View v) {
try {
FileInputStream fileIn = openFileInput("mytextfile.txt");
InputStreamReader InputRead = new InputStreamReader(fileIn);
char[] inputBuffer = new char[READ_BLOCK_SIZE];
String s = "";
int charRead;
while ((charRead = InputRead.read(inputBuffer)) > 0) {
String readstring = String.copyValueOf(inputBuffer, 0, charRead);
s += readstring;
}
InputRead.close();
textmsg.setText(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Eine Toast-Nachricht wird angezeigt, wenn die Daten erfolgreich im internen Speicher gespeichert wurden. Beim Lesen werden die Daten im EditText
angezeigt.
Um die Datei zu sehen, öffnen Sie den Android Device Monitor über Tools -> Android -> Android Device Monitor
. Die Datei befindet sich im Ordner data -> data -> {Paketname} -> files
.