Flux de données Lecture/Ecriture Fichiers 1
Un flux de données est un objet qui représente une suite d octets d un programme pour une certaine destination ou issus d une source pour un programme flux d entrée (input stream): données vers le programme flux de sortie (output stream): données issues du programme flux d entrée à partir du clavier System.in Scanner keyboard = new Scanner(System.in); flux de sortie vers l écran ou un fichier System.out System.out.println("Output stream"); 2
Classe PrintWriter est un flux de sortie (output stream) pour écrire sur un fichier de texte méthodes print, println similaires de la classe System.out import java.io.printwriter; import java.io.fileoutputstream; import java.io.filenotfoundexception; PrintWriter fluxsortie; fluxsortie = new PrintWriter( new FileOutputStream(fichierNom)); Constructeur FileOutputStream prend comme argument un objet String qui est le nom du fichier de Constructeur PrintWriter prend un objet anonyme de classe FileOutputStream 3
On obtient un objet PrintWriter connecté au fichier texte fichiernom Ouverture du fichier fichiernom si le fichier existe le contenu est écrasé si le fichier n existe pas un nouveau fichier est crée Concaténer: fluxsortie =new PrintWriter( new FileOutputStream(fichierNom,true)); Ecriture avec print, println: fluxsortie.println( une chaine de caracteres ); 4
import java.io.printwriter; import java.io.fileoutputstream; import java.io.filenotfoundexception; public class TextFileOutputDemo { public static void main(string[] args) { PrintWriter fluxsortie = null; try { fluxsortie = new PrintWriter(new FileOutputStream("fichier.txt")); catch(filenotfoundexception e) { System.out.println("Erreur d ouverture fichier.txt."); System.exit(0); System.out.println("Ecriture sur fichier"); fluxsortie.println(" Premiere ligne du fichier "); fluxsortie.println(" Deuxiemeligne du fichier."); fluxsortie.close( ); System.out.println("Fin du programme."); 5
Classe Scanner pour lire à partir d un fichier texte import java.util.scanner; import java.io.fileinputstream; import java.io.filenotfoundexception; Lecture à partir du fichier standard d entrée (clavier): Scanner fluxentree =new Scanner(System.in); Lecture à partir du fichier fluxentree: Scanner fluxentree = new Scanner(new FileInputStream(fichierNom)); Les mêmes méthodes que la classe Scanner fluxentree.nextint(), fluxentree.nextline(), fluxentree.nextdouble(), fluxentree.nextlong()... fluxentree.hasnextline(), fluxentree.hasnextint()... retourne un boolean 6
import java.util.scanner; import java.io.fileinputstream; import java.io.filenotfoundexception; import java.io.printwriter; import java.io.fileoutputstream; public class DemoIO { public static void main(string[] args) { Scanner fluxentree = null; PrintWriter fluxsortie = null; try { fluxentree = new Scanner(new FileInputStream("original.txt")); fluxsortie= new PrintWriter( new FileOutputStream("numerote.txt")); catch(filenotfoundexception e) { System.out.println("Erreur ouverture fichier."); System.exit(0); String ligne = null; int no = 0; while (fluxentree.hasnextline( )) { ligne = fluxentree.nextline( ); no++; fluxsortie.println(no + " " + ligne); fluxentree.close( ); fluxsortie.close( ); 7
Classe BufferedReader pour lire à partir d un fichier méthodes: read and readline import java.io.bufferedreader; import java.io.filereader; import java.io.filenotfoundexception; import java.io.ioexception; ouverture du fichier texte: BufferedReader lectobj; lectobj= new BufferedReader(newFileReader(FichierNom)); readline lire une chaine de charactères (null si EOF) read lire un char (-1 si EOF) retourne un entier il faut convertir char next = (char)(lectobj.read()); readline, read peuvent lancer IOException 8
. readline retourne null si EOF. read retourne -1 si EOF Lecture des nombres: 1) readline(), 2) Integer.parseInt(), Double.parseDouble(),... 9
import java.io.bufferedreader; import java.io.filereader; import java.io.filenotfoundexception; import java.io.ioexception; public class TextFileInputDemo { public static void main(string[] args) { try {BufferedReader fluxentree= new BufferedReader(new FileReader("donnee.txt")); String ligne = fluxentree.readline( ); System.out.println(" Premiere ligne:"); System.out.println(ligne); ligne = fluxentree.readline( ); System.out.println(" Seconde ligne:"); System.out.println(ligne); fluxentree.close( ); catch(filenotfoundexception e) { System.out.println(" Fichier donnee nexiste pas"); System.out.println("ou erreur ouverture"); catch(ioexception e) { System.out.println("Erreur lecture donnee.txt."); 10
Classe File est une classe pour les noms de fichiers File fichierobj =new File( donnees ); if ( fichierobj.exists()) System.out.println( fichier existe ); if (fichierobj.canread()) System.out.println( pas lisible ); 11
Copyright 2008 Pearson Addison-Wesley. All rights reserved 12
Copyright 2008 Pearson Addison-Wesley. All rights reserved 13
Copyright 2008 Pearson Addison-Wesley. All rights reserved 14
Copyright 2008 Pearson Addison-Wesley. All rights reserved 15
Fichiers Binaires Java sont portables lecture ObjectInputStream import java.io.objectinputstream; import java.io.fileinputstream; import java.io.ioexception; ObjectInputStream fluxobj= new ObjectInputStream( new FileInputStream(fichierNom)); constructeur FileInputStream peut lancer FileNotFoundException constructeur ObjectInputStream peut lancer IOException méthodes : readint, readdouble, readchar, readboolean readutf pour String -il faut fermer le flux après lecture: close -lance EOFException si c est la fin du fichier 16
writeobject pour écrire un objet readobject pour lire un objet uneclasse unobjet=(uneclasse) fluxobj.readobject(); les objets doivent appartenir à une classe qui implémente l interface Serializable cette interface n a aucune méthode, aucune constante si la classe a des objets comme attributs, il faut que ces classes soient aussi Serializable - il vaut mieux sauvegarder les objets d une même classe 17
import java.io.objectoutputstream; import java.io.fileoutputstream; import java.io.ioexception; public class BinaryOutputDemo { public static void main(string[] args) { try { ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream( "donne.dat")); int i; for (i = 0; i < 5; i++) out.writeint(i); System.out.println(" on ecrit dans donne.dat."); out.close( ); catch(ioexception e) { System.out.println("Probleme fichier sortie."); 18
import java.io.objectinputstream; import java.io.fileinputstream; import java.io.ioexception; import java.io.filenotfoundexception; public class BinaryInputDemo { public static void main(string[] args) {try { ObjectInputStream in= new ObjectInputStream(new FileInputStream(" donne.dat")); int n1 = in.readint( ); int n2 = in.readint( ); System.out.println("ce qu on a lus :"); System.out.println(n1); System.out.println(n2); in.close( ); catch(filenotfoundexception e) { System.out.println( "Erreur donne.dat."); catch(ioexception e) {System.out.println("Problemes donnees dans donne.dat."); System.out.println( " Fin du programme"); 19