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