Bonjour à tous,
ça fait un bon moment que le sujet est inactif mais je tombe dessus aujourd'hui, et je trouve que c'est une question que beaucoup de personnes pourraient se poser
Mais "FileOutputStream et FileInputStream", c'est vraiment pas clair...
en plus utiliser FileOutputStream et FileInputStream sans buffer ce n'est pas terrible
Pour enregister une donnée dans un fichier .txt, tu doit d'abord te demander si tu enregistre un objet ou un type primitif (integer, double, float...)
Si tu doit enregistrer des objets, tu doit importer le package java.io.Serializable
exemple : on a une classe "Livre", tu voudrait enregistrer un objet livre un moment...
et bien il faut rentrer cette ligne de code tout en haut de ta classe :
import java.io.Serializable;
et déclarer ta classe de cette façon :
public class Livre implements Serializable
(sans ça tes objets ne pourront pas être sauvegardé. La serialisation, c'est le nom qu'on donne à l'action de sauvegarder un objet)
pour enregistrer un objet, tape ce code :
Livre monLivre;
ObjectOutputStream oos;
try{
oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(new File("tonFichierTexte.txt"))));
oos.writeObject(monLivre);
oos.close();
}
catch (java.io.IOException e) {e.printStackTrace();}
pour lire l'objet, tape ce code :
ObjectInputStream ois;
try
{
ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(new File("tonFichierTexte.txt"))));
monLivre = (Livre)ois.readObject();
ois.close();
}
catch (IOException e) {e.printStackTrace();}
catch (ClassNotFoundException e2) {e2.printStackTrace();}
Si tu doit juste lire et/ou écrire des types primitifs, tu n'as pas besoin d'importer le package java.io.Serialisable, ni d'implémenter "Serializable" à ta classe Livre
pour enregistrer un type primitif dans un fichier texte tape ce code :
int nombre;
try {
dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File("tonFichierTexte.txt"))));
dos.writeInt(nombre);
dos.close();
}
catch (java.io.IOException e) {e.printStackTrace();}
(si tu doit enregistrer un double au lieu d'un int par exemple, remplace la fonction writeInt, par writeDouble...)
Pour lire un type primitif dans un fichier texte, tape ce code :
try
{
dis = new DataInputStream(new BufferedInputStream(new FileInputStream(new File("saveNbGenres.txt"))));
nbGenres = dis.readInt();
dis.close();
}
catch (java.io.IOException e) {e.printStackTrace();}
(même chose ici, si tu doit lire un type différent, remplace la fonction readInt, par readFloat, ou readDouble...)
Pour écrire ou lire plusieurs données, tu n'as qu'a faire une boucle, dans ce genre :
int nombre, i, nombreMax;
try {
dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(new File("tonFichierTexte.txt"))));
i = 0;
while (i < nombreMax) {
dos.writeInt(nombre);
}
dos.close();
}
catch (java.io.IOException e) {e.printStackTrace();}
procède le la même façon pour lire plusieurs données.
(note : la 1ère donnée écrite, sera la 1ère lue. On parle de FIFO, First In First Out)
quand tu écris dans un fichier (avec oos ou dos) le fichier sera créé (dans le repertoire où se situe le main) si il n'existe pas. Par contre si tu essai de lire (avec ois ou dis) un fichier qui n'existe pas, cela va générer une erreur.
J'espère que ceci pourra en aider quelques uns