Android - Interner Speicher
Android bietet viele Arten von Speicher für Anwendungen, um ihre Daten zu speichern. Diese Speicherorte sind gemeinsame Einstellungen, interner und externer Speicher, SQLite-Speicher und Speicher über Netzwerkverbindung.
In diesem Kapitel werden wir uns den internen Speicher ansehen. Interner Speicher ist die Speicherung der privaten Daten im Gerätespeicher.
Standardmäßig sind diese Dateien privat und werden nur von Ihrer Anwendung aufgerufen. Sie werden gelöscht, wenn der Benutzer Ihre Anwendung löscht.
Datei schreiben
Rufen Sie die openFileOutput () -Methode mit dem Namen der Datei und dem Modus auf, um den internen Speicher zum Schreiben einiger Daten in die Datei zu verwenden. Der Modus kann privat, öffentlich usw. sein. Die Syntax ist unten angegeben -
FileOutputStream fOut = openFileOutput("file name here",MODE_WORLD_READABLE);
Die Methode openFileOutput () gibt eine Instanz von FileOutputStream zurück. Sie erhalten es also im Objekt von FileInputStream. Danach können Sie die Schreibmethode aufrufen, um Daten in die Datei zu schreiben. Die Syntax ist unten angegeben -
String str = "data";
fOut.write(str.getBytes());
fOut.close();
Datei lesen
Um aus der soeben erstellten Datei zu lesen, rufen Sie die Methode openFileInput () mit dem Namen der Datei auf. Es gibt eine Instanz von FileInputStream zurück. Die Syntax ist unten angegeben -
FileInputStream fin = openFileInput(file);
Danach können Sie die Lesemethode aufrufen, um jeweils ein Zeichen aus der Datei zu lesen, und anschließend drucken. Die Syntax ist unten angegeben -
int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
//string temp contains all the data of the file.
fin.close();
Neben den Methoden zum Schreiben und Schließen gibt es noch andere Methoden, die von der FileOutputStreamKlasse zum besseren Schreiben von Dateien. Diese Methoden sind unten aufgeführt -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | FileOutputStream(File file, boolean append) Diese Methode erstellt einen neuen FileOutputStream, der in eine Datei schreibt. |
2 | getChannel() Diese Methode gibt einen schreibgeschützten FileChannel zurück, der seine Position mit diesem Stream teilt |
3 | getFD() Diese Methode gibt den zugrunde liegenden Dateideskriptor zurück |
4 | write(byte[] buffer, int byteOffset, int byteCount) Diese Methode schreibt Count-Bytes aus dem Byte-Array-Puffer ab dem Positionsversatz in diesen Stream |
Neben den Methoden zum Lesen und Schließen gibt es noch andere Methoden, die von der FileInputStreamKlasse zum besseren Lesen von Dateien. Diese Methoden sind unten aufgeführt -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | available() Diese Methode gibt eine geschätzte Anzahl von Bytes zurück, die gelesen oder übersprungen werden können, ohne für weitere Eingaben zu blockieren |
2 | getChannel() Diese Methode gibt einen schreibgeschützten FileChannel zurück, der seine Position mit diesem Stream teilt |
3 | getFD() Diese Methode gibt den zugrunde liegenden Dateideskriptor zurück |
4 | read(byte[] buffer, int byteOffset, int byteCount) Diese Methode liest höchstens Bytes aus diesem Stream und speichert sie ab dem Offset im Bytearray b |
Beispiel
Hier ist ein Beispiel, das die Verwendung des internen Speichers zum Speichern und Lesen von Dateien demonstriert. Es wird eine grundlegende Speicheranwendung erstellt, mit der Sie aus dem internen Speicher lesen und schreiben können.
Um mit diesem Beispiel zu experimentieren, können Sie dies auf einem tatsächlichen Gerät oder in einem Emulator ausführen.
Schritte | Beschreibung |
---|---|
1 | Mit Android Studio IDE erstellen Sie eine Android-Anwendung unter dem Paket com.example.sairamkrishna.myapplication. |
2 | Ändern Sie die Datei src / MainActivity.java, um den erforderlichen Code hinzuzufügen. |
3 | Ändern Sie res / layout / activity_main, um entsprechende XML-Komponenten hinzuzufügen |
4 | Führen Sie die Anwendung aus und wählen Sie ein laufendes Android-Gerät aus. Installieren Sie die Anwendung darauf und überprüfen Sie die Ergebnisse |
Es folgt der Inhalt der geänderten Hauptaktivitätsdatei src/MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class MainActivity extends Activity {
Button b1,b2;
TextView tv;
EditText ed1;
String data;
private String file = "mydata";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
b1=(Button)findViewById(R.id.button);
b2=(Button)findViewById(R.id.button2);
ed1=(EditText)findViewById(R.id.editText);
tv=(TextView)findViewById(R.id.textView2);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
data=ed1.getText().toString();
try {
FileOutputStream fOut = openFileOutput(file,MODE_WORLD_READABLE);
fOut.write(data.getBytes());
fOut.close();
Toast.makeText(getBaseContext(),"file saved",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
FileInputStream fin = openFileInput(file);
int c;
String temp="";
while( (c = fin.read()) != -1){
temp = temp + Character.toString((char)c);
}
tv.setText(temp);
Toast.makeText(getBaseContext(),"file read",Toast.LENGTH_SHORT).show();
}
catch(Exception e){
}
}
});
}
}
Es folgt der geänderte Inhalt der XML res/layout/activity_main.xml.
Im folgenden Code abc zeigt das Logo von tutorialspoint.com an
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
<TextView android:text="Internal storage" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textview"
android:textSize="35dp"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point"
android:id="@+id/textView"
android:layout_below="@+id/textview"
android:layout_centerHorizontal="true"
android:textColor="#ff7aff24"
android:textSize="35dp" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Save"
android:id="@+id/button"
android:layout_alignParentBottom="true"
android:layout_alignLeft="@+id/textView"
android:layout_alignStart="@+id/textView" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:hint="Enter Text"
android:focusable="true"
android:textColorHighlight="#ff7eff15"
android:textColorHint="#ffff25e6"
android:layout_below="@+id/imageView"
android:layout_alignRight="@+id/textView"
android:layout_alignEnd="@+id/textView"
android:layout_marginTop="42dp"
android:layout_alignLeft="@+id/imageView"
android:layout_alignStart="@+id/imageView" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageView"
android:src="@drawable/abc"
android:layout_below="@+id/textView"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="load"
android:id="@+id/button2"
android:layout_alignTop="@+id/button"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read"
android:id="@+id/textView2"
android:layout_below="@+id/editText"
android:layout_toLeftOf="@+id/button2"
android:layout_toStartOf="@+id/button2"
android:textColor="#ff5bff1f"
android:textSize="25dp" />
</RelativeLayout>
Es folgt der Inhalt der res/values/string.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
Es folgt der Inhalt von AndroidManifest.xml Datei.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Versuchen wir, unsere gerade geänderte Speicheranwendung auszuführen. Ich nehme an, Sie hatten Ihre erstelltAVDwährend der Einrichtung der Umgebung. Um die App in Android Studio auszuführen, öffnen Sie eine der Aktivitätsdateien Ihres Projekts und klicken Sie in der Symbolleiste auf das
Nun müssen Sie einen beliebigen Text in das Feld eingeben. Zum Beispiel habe ich einen Text eingegeben. Drücken Sie die Speichertaste. Die folgende Benachrichtigung wird in Ihrer AVD angezeigt -
Wenn Sie nun die Ladetaste drücken, liest die Anwendung die Datei und zeigt die Daten an. In unserem Fall würden folgende Daten zurückgegeben -
Beachten Sie, dass Sie diese Datei tatsächlich anzeigen können, indem Sie zur Registerkarte DDMS wechseln. Wählen Sie in DDMS den Datei-Explorer aus und navigieren Sie zu diesem Pfad.
tools>android>android device Monitor
Dies wurde auch im Bild unten gezeigt.