Dans ce tuto je vais développer des méthodes me permettant de lire et écrire dans un fichier android. Pour faire cela je vais utiliser les class FileOutputStream, OutputStreamWriter pour l’écriture et les classes FileInputStream , InputStreamReader pour la lecture. J’utilise également la class Toast pour afficher des popups surgissant
D’abord ma méthode me permettant d’écrire dans un fichier
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | public void WriteSettings(Context context, String data){
FileOutputStream fOut = null;
OutputStreamWriter osw = null;
try{
fOut = context.openFileOutput("settings.dat",MODE_APPEND);
osw = new OutputStreamWriter(fOut);
osw.write(data);
osw.flush();
//popup surgissant pour le résultat
Toast.makeText(context, "Settings saved",Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Toast.makeText(context, "Settings not saved",Toast.LENGTH_SHORT).show();
}
finally {
try {
osw.close();
fOut.close();
} catch (IOException e) {
Toast.makeText(context, "Settings not saved",Toast.LENGTH_SHORT).show();
}
}
} |
Ma méthode me permettant de lire dans mon fichier et de renvoyer le contenu sous forme de String (chaine de caractères) .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public String ReadSettings(Context context){
FileInputStream fIn = null;
InputStreamReader isr = null;
char[] inputBuffer = new char[255];
String data = null;
try{
fIn = context.openFileInput("settings.dat");
isr = new InputStreamReader(fIn);
isr.read(inputBuffer);
data = new String(inputBuffer);
//affiche le contenu de mon fichier dans un popup surgissant
Toast.makeText(context, " "+data,Toast.LENGTH_SHORT).show();
}
catch (Exception e) {
Toast.makeText(context, "Settings not read",Toast.LENGTH_SHORT).show();
}
/*finally {
try {
isr.close();
fIn.close();
} catch (IOException e) {
Toast.makeText(context, "Settings not read",Toast.LENGTH_SHORT).show();
}
} */
return data;
} |
Pour tester ces deux méthodes je vais créer une fenêtre avec un bouton écrire, un bouton lire et une zone de saisie.
le fichier xml de ma fenêtre test.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/btecrire"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ecrire" />
<Button android:id="@+id/btvoir"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="voir" />
<EditText
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Ingredient"
android:background="#D4D0C8"
android:textColor="#000000"
/>
<TextView android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="" />
</LinearLayout>
</ScrollView> |
Je rajoute le code suivant, me permettant d’afficher ma fenêtre de test.xml et tester mes méthodes sur le click de mes différents boutons
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | setContentView(R.layout.test);
Button btvoir = (Button) findViewById(R.id.btvoir);
Button btecrire = (Button) findViewById(R.id.btecrire);
btvoir.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
ReadSettings(lecontext);
}
});
btecrire.setOnClickListener(new Button.OnClickListener() {
public void onClick(View v) {
TextView datatext = (TextView) findViewById(R.id.text);
String sQuantite = datatext.getText()+"\n";
WriteSettings(lecontext,sQuantite);
}
}); |
Résultat

Il est temps de mettre à profit les tutoriels d’Android France:
Passez à la vitesse supérieure et investissez quelques dizaines d’euros pour acquérir les connaissances qui vous feront gagner de l’argent avec vos applications rendez-vous sur notre boutique Android-france pour ces formations en vidéo


















16 août 2009 à 18 h 25 min
Bonjour,
merci pour cet excellent tuto, ils ne sont pas nombreux sur le sujet !
par contre je bloque sur un point : “lecontext”, qu’es ce que c’est que cette variable, où faut-il la définir et que représente-t-elle ?
merci d’avance pour votre éclairage…
26 août 2009 à 21 h 50 min
Salut,
Moi j’ai rajouté :
Context lecontext=getBaseContext();
Sylvain
19 novembre 2009 à 20 h 17 min
une fois le fichier crée, il se trouve où ? (depuis l’émulateur)
22 janvier 2010 à 10 h 52 min
Dans “ReadSettings”, ligne 19-26, pourquoi est-ce commenté ?
Il faut normalement bien fermer les fichiers et flux ouverts préalablement…
26 février 2010 à 15 h 25 min
J’ai la même question que kref ! A quel endroit dans le projet Android doit se trouver ce fichier qu’on charge avec openFileInput et openFileOutput ?
26 février 2010 à 17 h 03 min
@Doudou @kref vous retrouverez ces fichiers dans le répertoire asset de votre projet sout eclipse
23 juin 2010 à 13 h 57 min
Bonjour,
Merci pour ce petit tuto qui m’a beaucoup aidé dans mon projet.
Je voudrais tester l’existence du fichier “settings.dat” à l’ouverture de mon programme pour savoir si je peux le lire.
Je pensais utiliser la méthode “File.exist()” mais je ne parviens pas trouver le fichier en question. Je pense qu’il faudrait lui indiquer le chemin exact mais quel est-il ?
Pourriez m’indiquer le chemin du fichier ou une autre méthode pour savoir s’il existe ?
01 décembre 2010 à 23 h 11 min
Bonjour,
J’ai testé la méthode pour écrire dans le fichier settings.dat
Le problème que je rencontre est qu’il n’y a aucun bug mais le fichier n’est pas créé (le code s’exécute bien après vérification avec le débogueur)
Est ce que quelqu’un à déjà rencontré ce problème?
Merci
27 décembre 2010 à 20 h 58 min
En complément de ce très bonne article vu que la question as été posé plusieurs fois
par défaut le fichier ce trouve dans data/data//files/
pour tester l’existence du fichier si on a pas modifier le répertoire par défaut on peut faire :
#
# File tmp = new File(context.getFilesDir() + “/” + sFile);
# tmp.exists()
#
PS : je ne sais pas si cette méthode est la plus optimisée mais elle a le mérite d’être fonctionnelle et encore bravo pour l’article.
27 décembre 2010 à 21 h 01 min
oups petite erreur dsl.
data/data/{aplivation}/files/
31 décembre 2010 à 10 h 40 min
Bonjour,
J’ai utilisé ce code pour réaliser une application de saisie.
Les infos sont donc écrites dans un fichier setting.dat
initialement j’utilisais l’émulateur en 2.3.
Je viens d’acheter un archos 5 et j’ai donc créer un autre projet en android 1.6 pour que ce soit compatible avec l’archos.
J’ai testé l’application sur l’archos et ça m’indique que les données sont écrites (correspondant au message “Settings saved” ligne 11 de la procédure d’écriture ci-dessus).
Dans l’archos, je ne trouve pas le fichier setting.dat correspondant.
Dans l’émulateur android 2.3 je le trouvais dans data/data/nom_application/files comme plusieurs l’on précisé ici.
Dans l’archos, je ne le trouve pas, même si je crée les différents répertoires avant de tester de nouveau l’application.
Pourriez-vous m’aider ?
(je débute complètement)
Freddy
31 décembre 2010 à 10 h 40 min
Au fait, bon réveillon à tous !
Freddy
31 décembre 2010 à 11 h 13 min
Gon 23,
Je viens de relire ton post.
Comment fait-on pour changer le répertoire par défaut ?
Freddy
31 décembre 2010 à 13 h 29 min
Encore une question :
lorsque je lance mon application avec la version 1.6 de l’émulateur, je n’arrive pas à accéder au répertoire data/data/…..
lorsque je vais dans DDMS/file explorer, je clic sur le “+” de data pour ouvrir le dossier, l’arborescence disparait alors et pas moyen d’aller cherche le fichier qui a été écrit.
Ca marchait très bien avec l’émulateur en version 2.3
Savez-vous me dépanner ?
Freddy
02 janvier 2011 à 10 h 17 min
Bonjour,
Encore un commentaire sur le sujet de trouver un fichier écrit dans l’archos5.
J’ai fais afficher le chemin du fichier écrit. Le comble c’est que c’est le fameux “/data/data/ nom application / files/” qui s’inscrit mais je n’arrive toujours pas à le trouver.
Lorsque je le cherche, j’utilise l’explorateur d’origine : il affiche 2 arborescences dans un écran partagé avec “Archos 5″ en entête de chacun de ces arborescence.
Je comprend donc que je vois la racine et donc que le répertoire data que je vois est le premier “/data/”
Bref, la seule conclusion à laquelle je suis arrivé est qu’il y aurait des fichiers et répertoires cachés dans l’archos mais je n’ai rien trouvé à ce sujet (y compris dans les options de l’archos).
21 janvier 2011 à 11 h 11 min
Salut,
merci pour ce super tuto.
j’arrive à compiler l’appli sans pb.
Par contre ça plante dès que je veux écrire ou lire en utilisant les boutons. Est-ce que je dois préciser certaines permissions dans le AndroidManifest.xml ?
et si oui lesquelles ?
merci
Olivier
25 février 2011 à 20 h 16 min
Bonjour,
J’ai exactement le même problème que toi Freddy, j’ai essayé avec un samsung et l’enregistrement du fichier se fait bien mais impossible de le lire.
Si tu as solutionné ton problème, merci de m’indiquer la marche à suivre
06 mars 2011 à 19 h 30 min
Bonsoir,
Je n’ai pas solutionné le problème complètement, car j’ai travaillé sur d’autres aspect du programme depuis et j’ai aussi relâché un peu.
Il faut que je le finisse !
J’arrivais à lire le fichier via la fonction “ReadSettings”.
Ce que je n’arrive pas à voir, c’est le fichier lui-même dans l’arborescence des fichiers de l’archos.
J’ai trouvé une autre manière d’écrire et lire un fichier, avec cette fois le fichier visible dans l’explorer de fichiers :
http://www.developpez.net/forums/d976676/java/general-java/java-mobiles/android/peux-creer-fichier-texte-sd-card/
ceci peut t’aider :
http://www.pointgphone.com/forum/post16465
Freddy
22 janvier 2012 à 20 h 07 min
Bonjour,
J’ai une tablette A500 et lorsque je fait ce code, je ne trouve pas le fichier dans l’explorateur (ASTRO). Alors que je l’ai bien dans l’émulateur sur mon pc. Je n’ai pas non plus le dossier com.application…. dans mon dossier Android/data sur ma tablette. Est-ce normal?
Merci
Bribri