Chapitre 4: Persistance et Types de Stockage

Page 1 sur 20Lecteur de document UniversityLib

Chapitre 4: Persistance et Types de Stockage

Informatique (Gestion du stockage en Android) · course

Voir tous les documents en gestion et économie

Chapitre4

Persistance

1

Types de stockage

2

Stockage interne

• On peut sauvegarder des fichiers directement sur

la mémoire interne du téléphone.

• les fichiers sauvegardés par une application dans

la mémoire interne ne sont pas accessible par les

autres applications.

• Les deux opérations de lecture et écriture sont

permises

• Une fois on désinstalle une application, les

fichiers stockés sur la mémoire interne seront

supprimés

3

Ecriture dans un fichier

• on appelle la méthode openFileOutput avec le nom

du fichier et le mode d’ouverture du fichier (privé,

public en lecture, public en écriture, en rajout).

• On utilise la méthode write pour écrire des données

dans le fichier.

• On ferme le fichier en fin d’opérations d’écriture.

4

Ecriture dans un fichier

• on appelle la méthode openFileOutput avec le nom du

fichier et le mode d’ouverture du fichier (privé, public en

lecture, public en écriture, en rajout).

• On utilise la méthode write pour écrire des données dans

le fichier.

• On ferme le fichier en fin d’opérations d’écriture.

5

Exemple1

public void EcritureInterne(View v)

{String FILENAME="monfichier.txt";

String str="exemple de stockage interne";

FileOutputStream fos;

try{fos=openFileOutput(FILENAME,

Context.MODE_PRIVATE);

fos.write(str.getBytes());

fos.close();

}

catch(FileNotFoundException

Publicité

e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

6

Lecture d’un fichier

• on appelle la méthode openFileIntput avec le nom du

fichier

• On utilise la méthode read(buffer) pour lire et mettre

dans le buffer (tableau de bytes) retourne -1 quand fin du

fichier

• On ferme le fichier en fin d’opérations de lecture.

7

Exemple2

public void LectureInterne(View v)

{ String FILENAME="monfichier.txt";

FileInputStream fis;

byte[] buffer=new byte[1024];

StringBuilder content =new StringBuilder();

try{

fis=openFileInput(FILENAME);

while(fis.read(buffer)!=-1)

{content.append(new String(buffer));}

}catch(FileNotFoundException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

AlertDialog.Builder alert=new AlertDialog.Builder(MainActivity.this)

.setMessage(content.toString())

.setPositiveButton("Ok", new

DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

dialog.cancel();

}

});

alert.show();

8

}

Stockage Externe

• La mémoire externe est susceptible d’être non

disponible

• il est nécessaire de vérifier la disponibilité du

stockage externe avant d’effectuer n’importe

la méthode

requête

quelle

Publicité

getExternalStorageState.

en utilisant

9

Stockage Externe

les différents états possibles :

 MEDIA_BAD_REMOVAL : le stockage est débranché

avant d’être démonté.

 MEDIA_CHACKING : le stockage est en cours de

vérification.

 MEDIA_MOUNTED : le stockage est disponible en

lecture/écriture

 MEDIA_MOUNTED_READ_ONLY : le stockage est

disponible en lecture seule

10

Stockage Externe

 MEDIA_NOFS

:

le stockage est disponible mais

le

formatage n’est pas pris en charge.

 MEDIA_REMOVED : le stockage n’est pas présent.

 MEDIA_SHARED

(connecté au PC).

le stockage est utilisé en USB

:

 MEDIA_UNMOUNTABLE : le stockage est présent mais

ne peut pas être monté.

 MEDIA_UNMOUNTED : le stockage est présent mais n’est

pas monté.

11

Stockage Externe

 MEDIA_NOFS

:

le stockage est disponible mais

le

formatage n’est pas pris en charge.

 MEDIA_REMOVED : le stockage n’est pas présent.

 MEDIA_SHARED

(connecté au PC).

le stockage est utilisé en USB

:

 MEDIA_UNMOUNTABLE : le stockage est présent mais

ne peut pas être monté.

 MEDIA_UNMOUNTED : le stockage est présent mais n’est

Publicité

pas monté.

12

Accéder à la carte SD

• La méthode getExternalFileDir(String Type) permet

d’obtenir une instance de la classe File pointant sur le

répertoire où on doit sauvegarder les fichiers dans la carte

SD

• L’argument type peut avoir différentes valeurs

13

Accéder à la carte SD

DIRECTORY_ALARMS : emplacement des fichiers pouvant

être utilisé comme alarmes.

DIRECTORY_DCIM : emplacement des images et photos

DIRECTORY_DOWNLOADS : dossier contenant les fichiers

téléchargés

DIRECTORY_MOVIES : dossier contenant les vidéos

14

Accéder à la carte SD

DIRECTORY_MUSIC : dossier de musique

DIRECTORY_NOTIFICATION : dossier des sons utilisés

pour les notifications.

DIRECTORY_PICTURE : dossier des images accessibles par

l’utilisateur

DIRECTORY_PODCAST : dossier contenant les fichiers

audio représentant le podcast

DIRECTORY_RINGTONES : dossier contenant les sonneries

null : retourne le dossier racine de l’application

15

Ecriture dans un fichier externe

• On utilise la classe BufferedWriter et la méthode

write pour l’écriture

16

Exemple: Ecriture dans la

carte SD

final String storageState= Environment.getExternalStorageState();

if(storageState.equals(Environment.MEDIA_MOUNTED))

{//on peut lire et écrire

File outFile=getExternalFilesDir(null);

String Filename="/monfichier.txt";

String str="exemple de stockage externe";

try{

BufferedWriter bw = new BufferedWriter(new FileWriter(outFile+Filename));

bw.write(str);

bw.close();

Publicité

}

catch(FileNotFoundException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

17

Lecture d’un fichier externe

On utilise la classe BufferedReader et la méthode

readline() pour lire ligne par ligne

18

Exemple: Lecture de la carte SD

// accéder au répertoire par défaut du support externe

File outFile = Environment.getExternalStorageDirectory();

// Accès au fichier

File file = new File(outFile + "/monfichier.txt");

// Tester si le fichier désiré existe, sinon, un Toast affiche un message d’erreur

if (!file.exists()) {

Toast.makeText(this, "Fichier n’existe pas dans la carte SD", 1000).show();

}else{ // Si le fichier existe

try {

// Créer un BufferedReader pour parcourir le fichier en lecture

BufferedReader br = new BufferedReader(new FileReader(file));

// Stocker le contenu du fichier dans un buffer

String line;

StringBuffer buffer = new StringBuffer();

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

buffer.append(line);

}

// Fermer le fichier

br.close();

} catch(FileNotFoundException e){e.printStackTrace();}

catch(IOException e){e.printStackTrace();}

}

19

Droit d’écriture à la carte SD

A partir de la version KitKat pour modifier un fichier dans le support

de stockage externe, il faut tout d’abord ajouter la ligne suivante dans

le

fichier AndroidManifest :

<uses-permission

android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

20