Android - Stockage interne

Android fournit de nombreux types de stockage pour que les applications stockent leurs données. Ces emplacements de stockage sont les préférences partagées, le stockage interne et externe, le stockage SQLite et le stockage via une connexion réseau.

Dans ce chapitre, nous allons nous intéresser au stockage interne. Le stockage interne est le stockage des données privées sur la mémoire de l'appareil.

Par défaut, ces fichiers sont privés et ne sont accessibles que par votre application et sont supprimés lorsque l'utilisateur supprime votre application.

Fichier d'écriture

Afin d'utiliser le stockage interne pour écrire des données dans le fichier, appelez la méthode openFileOutput () avec le nom du fichier et le mode. Le mode peut être privé, public, etc. Sa syntaxe est donnée ci-dessous -

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

La méthode openFileOutput () renvoie une instance de FileOutputStream. Vous le recevez donc dans l'objet FileInputStream. Après cela, vous pouvez appeler la méthode write pour écrire des données sur le fichier. Sa syntaxe est donnée ci-dessous -

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

Fichier de lecture

Pour lire le fichier que vous venez de créer, appelez la méthode openFileInput () avec le nom du fichier. Il renvoie une instance de FileInputStream. Sa syntaxe est donnée ci-dessous -

FileInputStream fin = openFileInput(file);

Après cela, vous pouvez appeler la méthode de lecture pour lire un caractère à la fois dans le fichier, puis vous pouvez l'imprimer. Sa syntaxe est donnée ci-dessous -

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

Outre les méthodes d'écriture et de fermeture, il existe d'autres méthodes fournies par le FileOutputStreamclasse pour une meilleure écriture des fichiers. Ces méthodes sont énumérées ci-dessous -

Sr. Non Méthode et description
1

FileOutputStream(File file, boolean append)

Cette méthode construit un nouveau FileOutputStream qui écrit dans le fichier.

2

getChannel()

Cette méthode renvoie un FileChannel en écriture seule qui partage sa position avec ce flux

3

getFD()

Cette méthode renvoie le descripteur de fichier sous-jacent

4

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

Cette méthode écrit le nombre d'octets à partir du tampon du tableau d'octets à partir du décalage de position vers ce flux

Outre les méthodes de lecture et de fermeture, il existe d'autres méthodes fournies par le FileInputStreamclasse pour une meilleure lecture des fichiers. Ces méthodes sont énumérées ci-dessous -

Sr. Non Méthode et description
1

available()

Cette méthode retourne un nombre estimé d'octets qui peuvent être lus ou ignorés sans blocage pour plus d'entrée

2

getChannel()

Cette méthode renvoie un FileChannel en lecture seule qui partage sa position avec ce flux

3

getFD()

Cette méthode renvoie le descripteur de fichier sous-jacent

4

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

Cette méthode lit au maximum les octets de longueur de ce flux et les stocke dans le tableau d'octets b en commençant à offset

Exemple

Voici un exemple illustrant l'utilisation du stockage interne pour stocker et lire des fichiers. Il crée une application de stockage de base qui vous permet de lire et d'écrire à partir du stockage interne.

Pour expérimenter cet exemple, vous pouvez l'exécuter sur un appareil réel ou dans un émulateur.

Pas La description
1 Vous utiliserez Android Studio IDE pour créer une application Android sous un package com.example.sairamkrishna.myapplication.
2 Modifiez le fichier src / MainActivity.java pour ajouter le code nécessaire.
3 Modifiez le res / layout / activity_main pour ajouter les composants XML respectifs
4 Exécutez l'application et choisissez un appareil Android en cours d'exécution, installez l'application dessus et vérifiez les résultats

Voici le contenu du fichier d'activité principal modifié 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){
            }
         }
      });
   }
}

Voici le contenu modifié du xml res/layout/activity_main.xml.

Dans le code suivant abc indique le logo de 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>

Voici le contenu de la res/values/string.xml.

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

Voici le contenu de AndroidManifest.xml fichier.

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

Essayons d'exécuter notre application de stockage que nous venons de modifier. Je suppose que vous avez créé votreAVDlors de la configuration de l'environnement. Pour exécuter l'application à partir du studio Android, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Le studio Android installe l'application sur votre AVD et la démarre et si tout va bien avec votre configuration et votre application, elle affichera la fenêtre de l'émulateur suivant -

Maintenant, ce que vous devez faire est de saisir du texte dans le champ. Par exemple, j'ai entré du texte. Appuyez sur le bouton Enregistrer. La notification suivante apparaîtrait dans votre AVD -

Maintenant, lorsque vous appuyez sur le bouton de chargement, l'application lit le fichier et affiche les données. Dans le cas de notre, les données suivantes seraient renvoyées -

Notez que vous pouvez réellement afficher ce fichier en passant à l'onglet DDMS. Dans DDMS, sélectionnez l'explorateur de fichiers et parcourez ce chemin.

tools>android>android device Monitor

Cela a également été montré dans l'image ci-dessous.