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

Symbol Ausführen . Android Studio installiert die App auf Ihrer AVD und startet sie. Wenn mit Ihrer Einrichtung und Anwendung alles in Ordnung ist, wird das folgende Emulatorfenster angezeigt:

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.