Android Series (Partie 4) - Stockage de données

Embed Size (px)

Citation preview

  • 7/31/2019 Android Series (Partie 4) - Stockage de donnes

    1/8

    Institut Suprieur dInformatiqueUniversit de Tunis el Manar

    MME. LILIA SFAXI

    TP4: Stockage de donnesProgrammation Mobile 2me Licence Systmes Embarqus

    Anne Universitaire : 2011/2012

  • 7/31/2019 Android Series (Partie 4) - Stockage de donnes

    2/8

    TP4 : Stockage de donnes

    MME. LILIA SFAXI 2011/2012

    1

    TP4: Stockage de donnesProgrammation MobileObjectifs du TP

    Ce TP a pour objectif de vous initier au stockage des donnes dans le tlphone Android, dans la mmoire interne

    du tlphone et dans une carte de stockage externe.

    I.Stockage des donnes dans la mmoire interne

    Une application peut stocker ses donnes dans la mmoire interne du tlphone. Par dfaut, ces donnes son

    prives, cest dire quelles ne sont pas accessibles partir dautres applications. A la suppression de lapplication, ce

    donnes sont supprimes.

    Pour chaque application, le systme Android cre un rpertoire qui sappelle

    /data/data/package_de_lapplication. Les fichiers internes sont stocks dans le rpertoirefiles contenu dans ce rpertoire.

    I. 1.Lecture et criture des donnes partir dun fichierLes primitives pour la manipulation des fichiers en Java se dclinent en plusieurs types. On distingue

    principalement les primitives pour la lecture, et les primitives pour lcriture.

    I. 1. 1. Primitives de lecture

    Il existe principalement deux types de primitives de lecture : les primitives de type InputStream et les primitives

    de type Reader. Ces deux primitives permettent de lire un flux de donnes partir dune source en entre, mais la

    principale diffrence entre les deux, cest que le InputStream lit un flux doctets, tandis que le Reader lit un flux de

    caractres.

    A partir dun InputStream, il est possible de crer un Reader en utilisant la classe InputStreamReader. Il est bien

    entendu plus facile de grer un flux de caractres dans notre cas, puisque nous dsirons lire des chanes de caractres

    partir dun fichier. Nous utiliserons donc principalement les primitives de type Reader, et en particulier le FileReader, qu

    est un InputStreamReader particulier, qui lit un flux de caractres partir dun fichier.

    Enfin, pour faciliter la manipulation de ces flux, nous allons les envelopper dans un BufferedReader. Les

    primitives de type bufferisnajoutent pas de fonctionnalits supplmentaires, mais augmentent lefficacit dutilisation en

    fournissant des primitives facilitant lutilisation des flux, comme par exemple readLine().

  • 7/31/2019 Android Series (Partie 4) - Stockage de donnes

    3/8

    TP4 : Stockage de donnes

    MME. LILIA SFAXI 2011/2012

    2

    I. 1. 2. Primitives dcriture

    Les primitives dcriture duales InputStreamReader, FileReader et BufferedReader sont respectivemen

    OutputStreamWriter,FileWriteret BufferedWriter.

    I. 2.Cration ou modification dun fichierPour crer un fichier, ou modifier un fichier existant, la mthode prdfinie openFileOutput est utilise. En

    appelant cette mthode, il faut spcifier le nom du fichier, et ses modes douverture, qui sont:

    - MODE_PRIVATE : Le fichier nest accessible que par lapplication qui la cr.- MODE_WORLD_READABLE : Le fichier est accessible en lecture par les autres applications.- MODE_WORLD_WRITEABLE : Le fichier est accessible en criture par les autres applications.- MODE_APPEND : Si le fichier existe dj, les donnes seront ajoutes la fin.Indication : Il est possible de dfinir plusieurs modes la fois en les sparant par un |.

    Une mthode simple pour stocker des donnes dans un fichier est dutiliser le code suivant :

    {

    // ouverture (ou cration) du fichier pour modification en mode priv

    BufferedWriter bw = BufferedWriter( OutputStreamWriter(

    openFileOutput("nom_fichier",Context.MODE_PRIVATE)));

    // criture de la chane de caractre dans le fichier

    bw.write("chaine_a_ecrire");

    // fermeture du fichier

    bw.close();

    } (Exception e) {

    // Si une erreur existe, lafficher dans un Toast

    Toast.makeText( , e.getMessage(), Toast.LENGTH_LONG).show();

    }

    TAF-1 : Crer une application Android appele Stockage.

    Lactivit principale contient un champ de saisie et un bouton appel Ecrire Interne. En cliquant sur le bouton, le co

    du champs de saisie sera stock dans un fichier appel : saisie.txt .

    Nous dsirons que ce fichier soit accessible en lecture par les autres applications, et que la chane entre soit ajoutfin du fichier.

    I. 3.Lecture du contenu dun fichierLe code suivant permet de lire le contenu dun fichier, et de le stocker dans une chane de caractres.

  • 7/31/2019 Android Series (Partie 4) - Stockage de donnes

    4/8

    TP4 : Stockage de donnes

    MME. LILIA SFAXI 2011/2012

    3

    {

    // ouverture du fichier pour lectureBufferedReader br = BufferedReader( InputStreamReader(

    openFileInput("nom_du_fichier")));

    // line est une variable qui stocke le contenu dune ligne

    String line;

    // StringBuffer contient des caractres qui peuvent tre modifis

    StringBuffer buffer = StringBuffer();

    // lecture des lignes du fichier et leur sauvegarde dans le StringBuffer

    ((line = br.readLine()) != ) {

    buffer.append(line);

    }

    // fermeture du Reader

    br.close();

    } (Exception e) {

    // Si une erreur existe, lafficher dans un Toast

    Toast.makeText( , e.getMessage(), Toast.LENGTH_LONG).show();

    }

    TAF-2 : Ajouter un autre bouton votre activit, appel Lire Interne. Le clic sur ce bouton affiche le contenu du f

    saisie.txt dans un Toast.

    I. 4.Accs au fichier partir dune autre applicationIl est possible daccder un fichier cr dans une application partir dune autre application. Le fichier doi

    respecter les conditions suivantes :

    - Il doit tre cr avec le modeMODE_WORLD_READABLE pour tre accessible en lecture- Il doit tre cr avec le modeMODE_WORLD_WRITEABLE pour tre accessible en criturePour cela, on ne doit pas appeler le fichier directement par son nom dans la deuxime application, car le systme

    va le chercher dans le rpertoire associ cette application. Au lieu de cela, il faut ajouter une rfrence au package de

    lapplication laquelle appartient le fichier.

    Par exemple, si le fichier fich.txt a t cre par lapplication dont le package est pack.app1, alors remplacer

    openFileOutput("fich.txt") par createPackageContext("pack.app1", 0).openFileOutput("fich.txt") et garder le reste

    du code identique, pour lcriture ou la lecture du fichier.

    TAF-3 :

    - Crer une deuxime application, appeleAccesStockage.- Modifier le fichier saisie.txt cr dans la premire application en y ajoutant la ligne Accessib

  • 7/31/2019 Android Series (Partie 4) - Stockage de donnes

    5/8

    TP4 : Stockage de donnes

    MME. LILIA SFAXI 2011/2012

    4

    lextrieur

    - Excuter la premire application, et afficher le contenu du fichier. Y trouvez-vous la chane ajoute ? Spourquoi ?

    II.Stockage des donnes dans une mmoire externeAndroid supporte laccs un systme de stockage externe (une carte SD, par exemple). Tous les fichiers et

    rpertoires de ce support de stockage sont accessibles en lecture pour toutes les applications.

    II. 1.Accs et modification du support de stockage externe

    Pour visualiser le contenu du support de stockage externe avec Eclipse, il est possible dutiliser la perspective

    DDMS (Dalvik Debug Monitor Server). Pour cela :

    - Aller Window -> Open Perspective -> Other- Slectionner DDMS et cliquer sur OK.Une fois la perspective choisie, laffichage devient comme dans la figure suivante :

  • 7/31/2019 Android Series (Partie 4) - Stockage de donnes

    6/8

    TP4 : Stockage de donnes

    MME. LILIA SFAXI 2011/2012

    5

    Dans FileExplorer, vous pouvez voir le contenu de votre carte SD sous le rpertoire mnt/sdcard.

    - Pour ajouter un fichier votre carte SD, slectionner le rpertoire sdcard et cliquer sur le bouton- Pour tlcharger un fichier existant dans votre carte SD, cliquer sur le boutonPour revenir laffichage du code, il faut revenir la perspectiveJava. Pour cela, cliquer sur .

    TAF-4 : Crer sur votre ordinateur un fichier qui sappelle chaine.txt, dans lequel vous crirez : Texte dans la carte

    Ensuite, ajouter ce fichier la carte SD de votre mulateur.

    II. 2.Tester le support de stockage externePour tester si le support de stockage externe est bien mont et sil est accessible en criture, on utilise la variable

    suivante :

    String etat = Environment.getExternalStorageState();

    Cette variable etat est une chane de caractre qui contient ltat du support externe.

    - Si etat est gale Environment.MEDIA_MOUNTEDalors le support externe existe, est mont et accessible en lectureet criture.

    - Si etat est gale Environment.MEDIA_MOUNTED_READ_ONLY",alors le support externe existe, est mont mais esaccessible en lecture seulement.

    Ainsi, pour tester ltat du support externe, on peut excuter le code suivant :

    stockageExiste = ;

    stockageEcriture= ;

    String etat = Environment.getExternalStorageState();

    (Environment.MEDIA_MOUNTED.equals(etat)) {

    // Le support de stockage est accessible en lecture et criturestockageExiste = stockageEcriture= ;

    } (Environment.MEDIA_MOUNTED_READ_ONLY.equals(etat)) {

    // Le support de stockage est accessible en lecture seulement

    stockageExiste = ;

    stockageEcriture= ;

    } {

    // Le support de stockage nest pas accessible

    stockageExiste = stockageEcriture= ;

    }

  • 7/31/2019 Android Series (Partie 4) - Stockage de donnes

    7/8

    TP4 : Stockage de donnes

    MME. LILIA SFAXI 2011/2012

    6

    TAF-5 : Dans lapplication Stockage, crer une fonction qui sappelle mediaOK, qui retourne true si la carte SD existeaccessible en lecture et criture, etfalse sinon.

    II. 3.Lecture dun fichier dans le support de stockage externePour accder un fichier dans un support externe, on utilise le code suivant :

    // accder au rpertoire par dfaut du support externe

    File directory = Environment.getExternalStorageDirectory();

    // Accs au fichier

    File file = File(directory + "/nom_du_fichier");

    // Tester si le fichier dsir existe, sinon, un Toast affiche un message derreur

    (!file.exists()) {Toast.makeText( , "Fichier nexiste pas dans la carte SD", 1000).show();

    } { // Si le fichier existe

    {

    // Crer un BufferedReader pour parcourir le fichier en lecture

    BufferedReader br = BufferedReader( FileReader(file));

    // Stocker le contenu du fichier dans un buffer

    String line;

    StringBuffer buffer = StringBuffer();

    ((line = br.readLine()) != ) {

    buffer.append(line);

    }

    // Fermer le fichier

    br.close();

    } (Exception e) {Toast.makeText( , e.getMessage(), Toast.LENGTH_LONG).show();

    }

    }

    TAF-6 : Ajouter un autre bouton dans lapplication stockage appel LireExterne. Ce bouton permet de lire le conten

    fichier chaine.txt qui se trouve dans votre carte SD, et de lafficher dans un Toast.

    II. 4.Cration ou modification dun fichier dans un support externePour modifier un fichier dans le support de stockage externe, il faut tout dabord ajouter la ligne suivante dans le

    fichier AndroidManifest :

    Ensuite, utiliser les lignes suivantes dans le code de lapplication, pour les mmes variables directory et file que

    prcdemment :

  • 7/31/2019 Android Series (Partie 4) - Stockage de donnes

    8/8

    TP4 : Stockage de donnes

    MME. LILIA SFAXI 2011/2012

    7

    {

    // ouvrir le fichier en critureBufferedWriter bw = BufferedWriter( FileWriter(file));

    // crire la chaine

    bw.write("chaine_a_ecrire");

    // fermer le fichier

    bw.close();

    } (Exception e) {

    Toast.makeText( , e.getMessage(), 2000).show();}

    Remarque : Si vous dsirez ajouter le texte la fin du fichier, il faut remplacer FileWriter(file) par :

    FileWriter(file, ); Le deuxime paramtre du constructeur dtermine si la chane est concatne (true

    ou si le contenu est cras (false).

    TAF-7: Ajouter un autre bouton dans lapplication stockage appel Ecrire Externe. Ce bouton permet de stock

    contenu du champs de saisie dans le fichier chaine.txt.

    III.HomeworkCrer deux applications qui partagent un fichier resultat.txt qui se trouve dans la carte SD :

    - La premire application SommeFichiers contient un champs de saisie txt et deux boutons ajouter et afficherListeElle permet de :

    o Saisir un entier partir du champs txt.o Le clic sur ajouter permet de :

    Ajouter le contenu de txt la fin dun fichier interne appel entiers (chaque nouvelle entresera spare par une virgule de lentre prcdente)

    Lire le contenu du fichier resultat.txt Si ce fichier est vide ou nexiste pas, le crer et y mettre le contenu de txt Sinon, faire la somme de lentier dans le fichier resultat.txt avec lentier entr dans txt

    puis stocker le rsultat dans le fichier resultat.txt (lancienne valeur sera crase).

    o Le clic sur afficherListe permet dafficher dans un Toast le contenu du fichier interne entiers.- La deuxime application VerifierFichiers contient deux boutons :

    o Un bouton afficherListe qui affiche dans un Toast le contenu du fichier entierso Un bouton afficherResultat qui affiche dans un Toast le contenu du fichier resultat.txt

    Remarque :

    - Pour convertir une chane en entier : int valeur = Integer.valueOf(chaine) ;

    - Pour convertir un entier en chane : String chaine = String.valueOf(valeur) ;