Upload
lilia-sfaxi
View
215
Download
0
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) ;