Android - Memoria interna

Android offre molti tipi di spazio di archiviazione per le applicazioni per archiviare i propri dati. Questi luoghi di archiviazione sono preferenze condivise, archiviazione interna ed esterna, archiviazione SQLite e archiviazione tramite connessione di rete.

In questo capitolo esamineremo la memoria interna. La memoria interna è la memorizzazione dei dati privati ​​sulla memoria del dispositivo.

Per impostazione predefinita, questi file sono privati ​​e sono accessibili solo dall'applicazione e vengono eliminati quando l'utente elimina l'applicazione.

Scrittura del file

Per utilizzare la memoria interna per scrivere alcuni dati nel file, chiamare il metodo openFileOutput () con il nome del file e la modalità. La modalità potrebbe essere privata, pubblica ecc. La sintassi è indicata di seguito:

FileOutputStream fOut = openFileOutput("file name here",MODE_WORLD_READABLE);

Il metodo openFileOutput () restituisce un'istanza di FileOutputStream. Quindi lo ricevi nell'oggetto di FileInputStream. Dopodiché puoi chiamare il metodo di scrittura per scrivere i dati sul file. La sua sintassi è data di seguito:

String str = "data";
fOut.write(str.getBytes());
fOut.close();

File di lettura

Per leggere dal file appena creato, chiama il metodo openFileInput () con il nome del file. Restituisce un'istanza di FileInputStream. La sua sintassi è data di seguito:

FileInputStream fin = openFileInput(file);

Dopodiché, puoi chiamare il metodo read per leggere un carattere alla volta dal file e quindi puoi stamparlo. La sua sintassi è data di seguito:

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();

Oltre ai metodi di scrittura e chiusura, ci sono altri metodi forniti da FileOutputStreamclasse per una migliore scrittura dei file. Questi metodi sono elencati di seguito:

Suor n Metodo e descrizione
1

FileOutputStream(File file, boolean append)

Questo metodo crea un nuovo FileOutputStream che scrive su file.

2

getChannel()

Questo metodo restituisce un FileChannel di sola scrittura che condivide la sua posizione con questo flusso

3

getFD()

Questo metodo restituisce il descrittore di file sottostante

4

write(byte[] buffer, int byteOffset, int byteCount)

Questo metodo scrive count byte dal buffer dell'array di byte a partire dall'offset di posizione in questo flusso

Oltre ai metodi di lettura e chiusura, ci sono altri metodi forniti da FileInputStreamclasse per una migliore lettura dei file. Questi metodi sono elencati di seguito:

Suor n Metodo e descrizione
1

available()

Questo metodo restituisce un numero stimato di byte che possono essere letti o ignorati senza bloccare ulteriori input

2

getChannel()

Questo metodo restituisce un FileChannel di sola lettura che condivide la sua posizione con questo flusso

3

getFD()

Questo metodo restituisce il descrittore di file sottostante

4

read(byte[] buffer, int byteOffset, int byteCount)

Questo metodo legge al massimo i byte di lunghezza da questo flusso e li memorizza nell'array di byte b a partire dall'offset

Esempio

Ecco un esempio che dimostra l'uso della memoria interna per archiviare e leggere i file. Crea un'applicazione di archiviazione di base che consente di leggere e scrivere dalla memoria interna.

Per sperimentare questo esempio, puoi eseguirlo su un dispositivo reale o in un emulatore.

Passi Descrizione
1 Utilizzerai l'IDE di Android Studio per creare un'applicazione Android in un pacchetto com.example.sairamkrishna.myapplication.
2 Modifica il file src / MainActivity.java per aggiungere il codice necessario.
3 Modifica res / layout / activity_main per aggiungere i rispettivi componenti XML
4 Esegui l'applicazione e scegli un dispositivo Android in esecuzione, installa l'applicazione su di esso e verifica i risultati

Di seguito è riportato il contenuto del file di attività principale modificato 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){
            }
         }
      });
   }
}

Di seguito è riportato il contenuto modificato del file xml res/layout/activity_main.xml.

Nel codice seguente abc indica il logo di tutorialspoint.com
<?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>

Di seguito è riportato il contenuto del file res/values/string.xml.

<resources>
   <string name="app_name">My Application</string>
</resources>

Di seguito è riportato il contenuto di AndroidManifest.xml file.

<?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>

Proviamo a eseguire la nostra applicazione di archiviazione che abbiamo appena modificato. Presumo che tu abbia creato il tuoAVDdurante l'impostazione dell'ambiente. Per eseguire l'app da Android Studio, apri uno dei file di attività del tuo progetto e fai clic sull'icona Esegui dalla barra degli strumenti. Android Studio installa l'app sul tuo AVD e la avvia e se tutto va bene con la tua configurazione e applicazione, verrà visualizzata la seguente finestra dell'emulatore:

Ora quello che devi fare è inserire qualsiasi testo nel campo. Ad esempio, ho inserito del testo. Premi il pulsante Salva. La seguente notifica apparirà nel tuo AVD -

Ora quando si preme il pulsante di caricamento, l'applicazione leggerà il file e visualizzerà i dati. In caso di nostro, verranno restituiti i seguenti dati:

Nota che puoi effettivamente visualizzare questo file passando alla scheda DDMS. In DDMS, seleziona Esplora file e naviga in questo percorso.

tools>android>android device Monitor

Questo è stato mostrato anche nell'immagine sottostante.