Aujourd’hui, nous allons explorer le stockage interne d’Android. Android offre quelques méthodes structurées pour stocker des données. Celles-ci incluent
- Préférences partagées
- Stockage interne
- Stockage externe
- Stockage SQLite
- Stockage via une connexion réseau (sur le cloud)
Dans ce tutoriel, nous allons explorer l’enregistrement et la lecture de données dans des fichiers en utilisant le Stockage interne d’Android.
Stockage interne d’Android
Le stockage interne d’Android est l’enregistrement des données privées sur la mémoire de l’appareil. Par défaut, l’enregistrement et le chargement de fichiers dans le stockage interne sont privés à l’application, et les autres applications n’auront pas accès à ces fichiers. Lorsque l’utilisateur désinstalle l’application, les fichiers stockés internes associés à l’application sont également supprimés. Cependant, veuillez noter que certains utilisateurs rootent leurs téléphones Android, obtenant un accès superutilisateur. Ces utilisateurs pourront lire et écrire les fichiers qu’ils souhaitent.
Lecture et écriture de fichiers texte dans le stockage interne d’Android
Android propose les méthodes openFileInput
et openFileOutput
des classes Java I/O pour modifier les flux de lecture et d’écriture à partir et vers des fichiers locaux.
-
openFileOutput(): Cette méthode est utilisée pour créer et sauvegarder un fichier. Sa syntaxe est la suivante :
FileOutputStream fOut = openFileOutput("nom du fichier", Context.MODE_PRIVATE);
La méthode
openFileOutput()
retourne une instance deFileOutputStream
. Ensuite, nous pouvons appeler la méthode write pour écrire des données dans le fichier. Sa syntaxe est la suivante :String str = "données de test"; fOut.write(str.getBytes()); fOut.close();
-
openFileInput(): Cette méthode est utilisée pour ouvrir un fichier et le lire. Elle renvoie une instance de FileInputStream. Sa syntaxe est donnée ci-dessous :
FileInputStream fin = openFileInput(file);
Ensuite, nous appelons la méthode read pour lire un caractère à la fois à partir du fichier, puis l’imprimer. Sa syntaxe est donnée ci-dessous :
int c; String temp=""; while( (c = fin.read()) != -1){ temp = temp + Character.toString((char)c); } fin.close();
Dans le code ci-dessus, la chaîne temp contient toutes les données du fichier.
-
Notez que ces méthodes n’acceptent pas les chemins de fichiers (par exemple, chemin/vers/fichier.txt), elles prennent simplement des noms de fichiers simples.
Structure de projet de stockage interne Android
Exemple de code de stockage interne Android
La mise en page xml contient un EditText
pour écrire des données dans le fichier et un bouton Écrire et un bouton Lire. Notez que les méthodes onClick
sont définies uniquement dans le fichier xml comme indiqué ci-dessous : activity_main.xml
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
xmlns:tools="https://schemas.android.com/tools"
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:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:padding="5dp"
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_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="22dp"
android:minLines="5"
android:layout_margin="5dp">
<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"
android:layout_alignTop="@+id/button2"
android:layout_alignRight="@+id/editText1"
android:layout_alignEnd="@+id/editText1" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Read Text From file"
android:onClick="ReadBtn"
android:layout_centerVertical="true"
android:layout_alignLeft="@+id/editText1"
android:layout_alignStart="@+id/editText1" />
</RelativeLayout>
La classe MainActivity
contient l’implémentation de la lecture et de l’écriture dans les fichiers comme expliqué ci-dessus.
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);
}
// écrire du texte dans un fichier
public void WriteBtn(View v) {
// ajouter-écrire du texte dans un fichier
try {
FileOutputStream fileout=openFileOutput("mytextfile.txt", MODE_PRIVATE);
OutputStreamWriter outputWriter=new OutputStreamWriter(fileout);
outputWriter.write(textmsg.getText().toString());
outputWriter.close();
// afficher le message de fichier enregistré
Toast.makeText(getBaseContext(), "File saved successfully!",
Toast.LENGTH_SHORT).show();
} catch (Exception e) {
e.printStackTrace();
}
}
// Lire du texte à partir d'un fichier
public void ReadBtn(View v) {
// lire du texte à partir d'un fichier
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) {
// conversion de char en string
String readstring=String.copyValueOf(inputBuffer,0,charRead);
s +=readstring;
}
InputRead.close();
textmsg.setText(s);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ici, un toast est affiché lorsque les données sont écrites avec succès dans le stockage interne et les données sont affichées dans l’EditText lui-même lors de la lecture des données à partir du fichier. L’image ci-dessous est la sortie du projet. L’image montre du texte écrit dans le stockage interne et en cliquant sur Lire, il affiche à nouveau le texte dans le même EditText.
Où se trouve le fichier?
Pour voir réellement le fichier, ouvrez le Moniteur de périphériques Android depuis Outils->Android->Moniteur de périphériques Android. Le fichier est présent dans le dossier data->data->{nom du package}->files comme indiqué dans les images ci-dessous: Le fichier « mytextfile.txt » se trouve dans le nom du package du projet, c’est-à-dire com.journaldev.internalstorage comme indiqué ci-dessous:
Téléchargez le projet final pour exemple de stockage interne Android depuis le lien ci-dessous.
Source:
https://www.digitalocean.com/community/tutorials/android-internal-storage-example-tutorial