Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
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
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.