La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

STREAMS (et fichiers).

Présentations similaires


Présentation au sujet: "STREAMS (et fichiers)."— Transcription de la présentation:

1 STREAMS (et fichiers)

2 OBJECTIFS Lire et écrire des fichiers
Être familier avec les concepts de fichiers textes et binaires Lire et écrire des objets avec la sérialisation Apprendre à traiter la ligne de commandes Savoir distinguer et utiliser les fichiers séquentiels et aléatoires (à accès direct) 4/26/2019 IFT1020

3 CODES TestFichierTexte.java (digits)
TestBouquet.java (objets sérialisables) 4/26/2019 IFT1020

4 Deux manières de sauver des données
Format texte Format binaire 4/26/2019 IFT1020

5 Format texte Lisible par l’humain Séquences de caractères
Stockage des entiers avec des caractères: en fait ‘1’ ’2’ ’3’ ’4’ ’5’ Dans ce cas, utilisez les classes Reader et Writer ainsi que leurs sous-classes 4/26/2019 IFT1020

6 Format binaire Plus compact et efficace
Les entiers sont stockés avec leur repésentation binaire, … Dans ce cas, utilisez InputStream et OutputStream ainsi que leurs sous-classes 4/26/2019 IFT1020

7 Lire des données textes sur fichier
Créer un FileReader Utilisez sa méthode read pour lire un caractère à la fois retourne le caractère suivant dans un int ou l’entier -1 si à la fin du fichier Il faut donc tester pour -1 Si n’est pas -1, caster dans un char Fermer le fichier quand c’est terminé 4/26/2019 IFT1020

8 Code pour lire un caractère sur disque
FileReader lecteur = new FileReader(“donnees.txt"); int suivant = reader.read(); char c; if(suivant != -1) c = (char)suivant; ... reader.close(); 4/26/2019 IFT1020

9 Code pour écrire un caractère sur le disque
FileWriter scripteur = new FileWriter(“donnees.txt"); ... char c=''; ... scripteur.write(c); ... scripteur.close(); 4/26/2019 IFT1020

10 Pour lire des données binaires sur disque
Créer un FileInputStream Utilisez sa méthode read pour lire un byte retourne le prochain byte dans un int ou l’entier -1 à la fin du fichier Il faut donc tester pour -1 Si non -1, caster dans un byte Fermer le fichier quand terminé 4/26/2019 IFT1020

11 Code pour lire un byte du disque
FileInputStream fluxEntree = new FileInputStream(“donnees.dat"); int suivant = fluxEntree.read(); byte b; if(suivant != -1) b = (byte)suivant; ... fluxEntree.close(); 4/26/2019 IFT1020

12 Code pour écrire un byte sur disque
FileOutputStream fluxSortie = new FileOutputStream(“donnees.txt"); ... byte b = 0; ... fluxSortie.write(b); ... fluxSortie.close(); 4/26/2019 IFT1020

13 Écrire des fichiers de textes
Utiliser un PrintWriter pour Briser les nombres et chaînes en des caractères individuels Les envoyer un à la fois vers un FileWriter Code pour créer un PrintWriter FileWriter scripteur = new FileWriter(“donnees.txt”) PrintWriter sortie = new PrintWriter(scripteur); 4/26/2019 IFT1020

14 Écrire des fichiers textes
Utilisez print et println pour imprimer des nombres, objets ou chaînes sortie.println(29.95); sortie.println(new Rectangle(5,10,15,25)); sortie.println(“Bonjour!"); 4/26/2019 IFT1020

15 Lire des fichiers textes
Utilisez un BufferedReader Soit lire un caractère à la fois à partir d’un FileReader Soit assembler les caractères dans une ligne et la retourner Pour convertir des chaînes en nombres, utilisez Integer.parseInt Integer.parseDouble 4/26/2019 IFT1020

16 Lire des fichiers textes
Code pour lire un fichier texte FileReader lecteur = new FileReader(“donnees.txt"); BufferedReader entree = new BufferedReader(lecteur); String ligneEntree = entree.ReadLine(); double x = Double.parseDouble(ligneEntree); 4/26/2019 IFT1020

17 Allons voir le code de TestFichierTexte.java…
4/26/2019 IFT1020

18 La classe et le dialogue de fichiers
La classe File décrit des fichiers ou des répertoires sur disque Créer un objet File File fichier = new File("donnees.txt"); Un objet de la classe File ne s’utilise pas directement. Il faut « le passer » à un lecteur ou à un scripteur, ou bien à un stream. 4/26/2019 IFT1020

19 La classe File Quelques méthodes de la classe File :
delete renameTo exists Construire un FileReader à partir d’un objet File : FileReader lecteur = new FileReader(fichier); 4/26/2019 IFT1020

20 Dialogue de fichiers… Utilisez JFileChooser pour laisser un utilisateur fournir un nom de fichier à travers un dialogue GUI Pour construire un objet JFileChooser, il faut appeler sa méthode showOpenDialog ou showSaveDialog Il faut spécifier null ou la composante GUI dans laquelle faire apparaître le dialogue 4/26/2019 IFT1020

21 Dialogue de fichiers Si l’utilisateur choisit un fichier: JFileChooser.APPROVE_OPTION est retournée Si l’utilisateur annule la sélection: JFileChooser.CANCEL_OPTION est retournée Si un fichier est choisi, utilisez la méthode GetSelectedFile pour obtenir un objet File qui décrit le fichier 4/26/2019 IFT1020

22 Le dialogue JFileChooser
4/26/2019 IFT1020

23 Code pour utiliser un JFileChooser
JFileChooser selecteur = new JFileChooser(); FileReader entree = null; if(selecteur.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) { File fichier = selecteur.getSelectedFile(); entree = new FileReader(fichier); } 4/26/2019 IFT1020

24 Arguments de la ligne de commandes
On lance un programme de la ligne de commandes On spécifie les arguments après le nom du programme Dans le programme, on accède et traite les chaînes des paramètres de qui se retrouvent dans l’argument args de la méthode main 4/26/2019 IFT1020

25 Exemple d’une ligne de commandes
Java MonProgramme -d fichier.txt class MyProgram { public static void main(String[] args) { ... } args[0] "-d" args[1] "fichier.txt" 4/26/2019 IFT1020

26 Streams d’objets La classe ObjectOutputStream sert à sauver des objets sur disque La classe ObjectInputStream sert à lire des objets sur disque Les objets sont sauvés en format binaire 4/26/2019 IFT1020

27 Écrire un objet Baloune sur un fichier
Baloune b = ...; ObjectOutputStream sortie = new ObjectOutputStream( new FileOutputStream(“balounes.dat")); sortie.writeObject(b); 4/26/2019 IFT1020

28 Lire un objet Baloune d’un fichier
ObjectInputStream entree = new ObjectInputStream(new FilInputStream(“balounes.dat")); Baloune b = (Baloune)entree.readObject(); La méthode readObject peut lancer (throw) une exception de type ClassCastException Vous devez l’attraper (catch) ou la déclarer 4/26/2019 IFT1020

29 Écrire et lire un ArrayList sur fichier
ArrayList a = new ArrayList(); //ajouter des objets à la liste sortie.writeObject(a); Lire ArrayList a = (ArrayList)entree.readObject(); 4/26/2019 IFT1020

30 L’interface Serializable
Les objets qu’on écrit sur un stream d’objets doivent appartenir à une classe qui implante l’interface Serializable class Baloune implements Serializable { ... } L’interface Serializable ne contient aucune méthode. 4/26/2019 IFT1020

31 Allons voir le code Bouquet.java…
4/26/2019 IFT1020

32 Accès séquentiel et aléatoire
Sequentiel Un fichier est traiter dans l’ordre un byte à la fois Aléatoire Accès à des endroits arbitraires dans le fichier 4/26/2019 IFT1020

33 Séquentiel vs. Aléatoire
RandomAccessFile Pour ouvrir un fichier à accès aléatoire (ou direct) en mode de lecture et d’écriture RandomAccessFile f = new RandomAcessFile(“balounes.dat","rw"); 4/26/2019 IFT1020

34 Déplacements dans le fichier
Pour déplacer le pointeur du fichier à un byte spécifique f.seek(n); Pour connaître la position courante du pointeur long ptr = f.getFilePointer(); Pour obtenir le nombre de bytes dans un fichier long taille = f.length(); 4/26/2019 IFT1020


Télécharger ppt "STREAMS (et fichiers)."

Présentations similaires


Annonces Google