Nous verrons dans ce tuto qu’il existe 2 façons de sauvegarder des données dans un fichier sur Android. Vous êtes prêt ? Alors c’est parti !

 

 

Tout d’abord, on peut faire une sauvegarde interne dans la mémoire du téléphone ou bien faire une sauvegarde externe dans la carte SD de l’utilisateur.

Il faut savoir que les informations enregistrées dans la carte mémoire externe du terminal mobile sont accessibles par l’ensemble des applications.

Alors que les données sauvegardées en mémoire interne peuvent ou non être partagé en lecture ou/et en écriture avec les autres applications.

 

Voici la liste des différentes permissions pour la création d’un fichier dans la mémoire interne :

 MODE_PRIVATE crée un fichier (ou remplace l’existant), le fichier ne sera disponible que pour notre application.

 MODE_APPEND crée un fichier (concatène si le fichier existe)

 MODE_WORLD_READABLE accès en lecture par les autres applications

 MODE_WORLD_WRITEABLE accès en écriture par les autres applications

 MODE_WORLD_READABLE|MODE_WORLD_WRITEABLE accès en lecture et écriture par tous

Pour l’écriture nous allons utiliser la méthode openfileoutput qui va renvoyer un FileOUtputStream,

Pour la lecture il faut utiliser la méthode openFileInput qui renvoie un FileInputStream.

 

Nous allons mettre en place une application toute simple qui va jouer le rôle d’un bloc note.

L’utilisateur pourra écrire dans un fichier, mais également l’ouvrir et l’éditer.

En termes d’interface nous aurons :

  • juste une zone de saisie.
  • Un bouton pour enregistrer les modifications.
  • Un bouton pour afficher le contenu de notre fichier.
  • Un autre bouton pour vider la zone de saisie.

 

Ce qui se résume à ce code là :

 

<LinearLayout xmlns:android=« http://schemas.android.com/apk/res/android »

    android:layout_width=« fill_parent »

    android:layout_height=« fill_parent »

    android:orientation=« vertical » >

 

   <EditText

        android:id=« @+id/texte »

        android:layout_width=« fill_parent »

        android:layout_height=« wrap_content »

        android:lines=« 5 »

         android:gravity=« top|left » android:inputType=« textMultiLine »

        android:scrollHorizontally=« false » />

   

   <LinearLayout xmlns:android=« http://schemas.android.com/apk/res/android »

    android:layout_width=« fill_parent »

    android:layout_height=« fill_parent »

    android:orientation=« horizontal » >

    <Button android:id=« @+id/btn »

    android:layout_width=« wrap_content »

    android:layout_height=« wrap_content »

    android:text=« Sauvegarder » />

   

    <Button android:id=« @+id/btn2 »

    android:layout_width=« wrap_content »

    android:layout_height=« wrap_content »

    android:text=« Afficher » />

   

        <Button android:id=« @+id/btn3 »

    android:layout_width=« wrap_content »

    android:layout_height=« wrap_content »

    android:text=« Vider » />

 

</LinearLayout>

 

</LinearLayout>

 

 

 

Pour l’enregistrement d’un fichier dans la mémoire interne du téléphone, Les deux méthodes qui vont nous intéresser sont

           

Pour l’écriture :

 

private void ecrireFicher(String nomFichier,String monText) {

             BufferedWriter writer = null;

             try {

                    File dir = getDir(« ToutMesFichiers »,MODE_PRIVATE);

                    File newfile = new File(dir.getAbsolutePath() + File.separator + nomFichier);

                    newfile.createNewFile();

                    writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newfile)));

                    writer.write(monText);

             } catch (Exception e) {

                    e.printStackTrace();

             } finally {

                    if (writer != null) {

                           try {

                                  writer.close();

                           } catch (IOException e) {

                                  e.printStackTrace();

                           }

                    }

             }

       }

 

 

 Pour la lecture :

 

 private String lireFichier(String nomFichier) {

             File dir = getDir(« ToutMesFichiers »,MODE_PRIVATE);

             File newfile = new File(dir.getAbsolutePath() + File.separator + nomFichier);

             String monText= » »;

             BufferedReader input = null;

             try {

               input = new BufferedReader(new InputStreamReader( new FileInputStream(newfile)

                    ));

               String line;

               StringBuffer buffer = new StringBuffer();

               while ((line = input.readLine()) != null) {

                    buffer.append(line);

               }

                monText = buffer.toString();

             } catch (Exception e) {

                    e.printStackTrace();

             } finally {

             if (input != null) {

               try {

                    input.close();

                    } catch (IOException e) {

                           e.printStackTrace();

                    }

               }

             }

           return monText;

           }

 

 

Voici ce que le téléphone va créer dans le répertoire /data/data/ :

 

 Il faut ensuite mettre les écouteurs d’évènements à nos boutons. Voici le contenu de la méthode oncreate.

 

 

 

public void onCreate(Bundle savedInstanceState) {

             super.onCreate(savedInstanceState);

             setContentView(R.layout.main);

             final EditText text = (EditText) findViewById(R.id.texte);

 

             Button valider = (Button) findViewById(R.id.btn);

 

             valider.setOnClickListener(new OnClickListener() {                

                    public void onClick(View v) {                        

                           ecrireFicher(« monFichier.txt », text.getText().toString());

                    }

             });

 

             Button afficher = (Button) findViewById(R.id.btn2);

             afficher.setOnClickListener(new OnClickListener() {               

                    public void onClick(View v) {                        

                           text.setText(lireFichier(« monFichier.txt »));

                    }

             });

            

             Button vider = (Button) findViewById(R.id.btn3);

             vider.setOnClickListener(new OnClickListener() {                  

                    public void onClick(View v) {                        

                           text.setText(«  »);

                    }

             });

         }

 

 

Voici le résultat d’un scénario d’utilisation :

 

  1. Un utilisateur rentre du texte 
  2. Il sauvegarde le texte dans le fichier
  3. Il vide le contenu de la zone de saisie
  4. Il affiche le contenu de son fichier
  5. Il modifie ce contenu
  6. Il sauvegarde la modification
  7. Il vide le contenu de la zone de saisie
  8. Il affiche le contenu de son fichier

 

 Voici des images issues d’un autre scénario ou l’utilisateur n’enregistre pas ses modifications.

 

 

                                    

 

 

Utilisation de la carte SD

 

Nous pouvons faire la même application, mais les fichiers seront sauvegardés dans la mémoire externe du téléphone.

 

Ajouter la permission dans le manifest :

<uses-permission android:name= »android.permission.WRITE_EXTERNAL_STORAGE » />

 

NB : Pour les personnes utilisant l’émulateur, il faut monter une carte SD.

Rappel de la commande (à exécuter dans tools/) :

mksdcard 1024M sdcard.img
Dans runconfiguration, ajouter :
-sdcard C:\android-sdk-windows\tools\sdcard.img
 
Nous allons modifier nos deux méthodes :


Pour l'écriture :

private void ecrireFicher(String nomFichier,String monText) {
        
        File sdLien = Environment.getExternalStorageDirectory(); 
        File monFichier = new File(sdLien , "monFichier.txt");
        BufferedWriter writer = null;        
        try {
        FileWriter out = new FileWriter(monFichier); 
         writer = new BufferedWriter(out);          
         writer.write(monText); 
        } catch (Exception e) {
                       e.printStackTrace();
        } finally {
          if (writer != null) {
               try {
                       writer.close();
               } catch (IOException e) {
                       e.printStackTrace();
               }
          }
        }
  }
 
Pour la lecture :
 
 
private String lireFichier(String nomFichier) {
        String monText='';
        File sdLien = Environment.getExternalStorageDirectory(); 
        File monFichier = new File(sdLien + "/" +nomFichier); 
        if (!monFichier.exists()) {
               throw new RuntimeException("Fichier innéxistant dur la carte sd");
        } 
        BufferedReader reader = null;
        try {
               reader = new BufferedReader(new FileReader(monFichier));
               StringBuilder builder = new StringBuilder();
               String line;
               while ((line = reader.readLine()) != null) {
                       builder.append(line);
               }
             monText = buffer.toString();
        } catch (Exception e) {
               e.printStackTrace();
        } finally {
               if (reader != null) {
                       try {
                               reader.close();
                       } catch (IOException e) {
                               e.printStackTrace();
                       }
               }
        }
        return monText;
    }
 
 
 
Voici le contenu du répertoire /mnt/sdcard/



 

En répétant les mêmes scénarios d’utilisation que précédemment, nous obtiendrons les mêmes résultats.

 

 

 

Voilà ce qu’il en est de la sauvegarde de fichiers sur Android, j’espère que ce petit tuto vous servira pour vos applications futures  Content

 




Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.