Flux de données •Lecture/Ecriture Fichiers

publicité
•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
import
import
import
import
java.util.Scanner;
java.io.FileInputStream;
java.io.FileNotFoundException;
java.io.PrintWriter;
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
import
import
import
java.io.BufferedReader;
java.io.FileReader;
java.io.FileNotFoundException;
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
import
import
import
java.io.ObjectInputStream;
java.io.FileInputStream;
java.io.IOException;
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
Téléchargement