Programmation Orientée Objet Flux et entrées/sorties Julien Provillard http://w
Programmation Orientée Objet Flux et entrées/sorties Julien Provillard http://www.i3s.unice.fr/~provilla/poo/ julien.provillard@unice.fr Programmation orientée objet Objectifs Entrées sorties Flux de caractères : Reader/Writer Flux standards Flux d’octets 2 Programmation orientée objet Paquetage java.io 3 Système d'exploitation Flux d'entrée Flux de sortie File InputStream Reader BufferedWriter BufferedReader DataOutputStream InputStreamReader OutputStream Writer OutputStreamWriter FileInputStream FileOutputStream FileReader FileWriter DataInputStream PrintWriter Plus de 50 classes au total! Programmation orientée objet Les flux d'entrée/sortie Les flux : connexions de taille limitée d'un émetteur vers un récepteur Écran, clavier, souris, fichiers : java.io À travers un socket : java.net Sortie (e.g., Écran) sort du système L'émetteur sérialise les données Entrée (e.g., Clavier) du système Le récepteur dé-sérialise les données Flux de sortie vers flux d'entrée 4 Programmation orientée objet Les fichiers : File Notion de fichier Chemin absolu ou relatif Objet de type File Représente le fichier situer sur le chemin /doc/fic.txt Le fichier n’existe pas nécessairement Le fichier peut être un dossier, un fichier texte ou binaire, un lien symbolique Exemple File fichier = new File("/doc/fic.txt"); 5 Programmation orientée objet Les fichiers : File Plusieurs constructeurs File(String chemin) • Chemin absolu ou relatif File(String parent, String chemin) • Chemin est relatif au parent File(File parent, String chemin) • Chemin est relatif au parent 6 Programmation orientée objet Les fichiers : portabilité Constantes Séparateur entre deux niveaux de dossier • final static char separatorChar; • final static String separator; • Représente "/", "\\", … selon le système d’exploitation Séparateur entre deux chemins • final static char pathSeparatorChar; • final static String pathSeparator; • Représente ":", ";", … selon le système d’exploitation 7 Programmation orientée objet Les fichiers : chemins relatifs Les noms relatifs sont par rapport au dossier de travail Propriété user.dir Le dossier dans lequel la JVM est lancé, celui où l’on trouve les .class Peut-être difficile à trouver selon l’IDE utilisé • Utiliser plutôt des noms absolus ou relatifs par rapport à un dossier choisi par un chemin absolu 8 Programmation orientée objet Les fichiers : niveau système Est-ce qu'un fichier (ou dossier) existe ? boolean exists() Type de fichier boolean isAbsolute() • Chemin absolu boolean isDirectory() • Est un dossier ? boolean isFile() • Est un fichier ? boolean isHidden() • Est un fichier caché ? 9 Programmation orientée objet Les fichiers : niveau système Création boolean mkDir(), boolean mkDirs() • Créer un dossier createNewFile() • Créer un nouveau fichier (s’il n’existe pas) createTempFile(String, String) createTempFile(String, String, File) • Créer un fichier temporaire Destruction boolean delete() • Destruction d’un fichier ou d’un dossier (true si succès) void deleteOnExit() • Destruction lorsque la JVM est détruite 10 Programmation orientée objet Les fichiers : niveau système Droits d'accès (depuis JDK 6) boolean canRead() boolean canWrite() boolean canExecute() Modifier les droits (depuis JDK6) boolean setReadOnly() boolean setWritable(boolean) boolean setReadable(boolean) boolean setExecutable(boolean) 11 Programmation orientée objet Les fichiers : niveau système Fichiers contenus dans un dossier String[] list() String[] list(FilenameFilter) File[] listFiles() File[] listFiles(FileFilter) File[] listFiles(FilenameFilter) Conversion en URI, URL java.net.URL toURL() • deprecated (toURI().toURL()) java.net.URI toURI() • Dépend de l’OS (escape caractères illégaux dans les URL) 12 LES FLUX DE CARACTÈRES 13 Programmation orientée objet Flux entrants : Reader Classe abstraite int read() throws IOException int read(char[]) throws IOException abstract int read(char[] buf, int deb, int nb) throws IOException long skip(long) throws IOException abstract void close() throws IOException synchronized void mark(int) synchronized void reset() throws IOException boolean markSupported() 14 Programmation orientée objet Flux entrants : sous-classes 15 « abstract » Reader BufferedReader CharArrayReader InputStreamReader FilterReader PipedReader StringReader PushbackReader FileReader LineNumberReader Programmation orientée objet Flux entrants : FileReader Un Reader à partir d’un fichier Constructeurs FileReader(String) FileReader(File) Exemple FileReader r = new FileReader("fic.txt"); 16 Programmation orientée objet Flux entrants : BufferedReader Permet de lire une ligne dans un Reader String readLine() throws IOException Constructeurs BufferedReader(Reader) BufferedReader(Reader, int) • Choisi la taille du buffer • IllegalArgumentException si la taille est négative ou nulle 17 Programmation orientée objet Lecture d’un fichier texte public class Lecture { static public void main(String[] args) { try { FileReader fr = new FileReader("fic.txt"); BufferedReader br = new BufferedReader(fr); String ligne = br.readLine(); while (ligne != null) { System.out.println(ligne); ligne = br.readLine(); } br.close(); } catch (IOException ex) { System.err.println("Erreur de lecture : " + ex); } } } 18 Ouvre un flux entrant de caractères Ferme le flux Programmation orientée objet Flux sortants : Writer Classe abstraite Writer append(char) throws IOException Writer append(CharSequence) throws IOException Writer append(CharSequence, int deb, int fin) throws IOException abstract void close() throws IOException abstract void flush() throws IOException void write(char[] buf) throws IOException abstract void write(char[] buf, int deb, int nb) throws IOException void write(int) throws IOException void write(String) throws IOException void write(String, int, int) throws IOException 19 Programmation orientée objet Flux sortants : sous-classes 20 « abstract » Writer BufferedWriter CharArrayWriter OutputStreamWriter FilterWriter PipedWriter StringWriter PrintWriter FileWriter Programmation orientée objet Flux sortants : FileWriter Un Writer vers un fichier Constructeurs FileWriter(String) FileWriter(String, boolean) FileWriter(File) FileWriter(File, boolean) Exemple FileWriter w = new FileWriter("fic.txt"); 21 Programmation orientée objet Flux sortants : BufferedWriter Permet d’écrire un saut de ligne indépendamment du système void newLine() throws IOException Constructeurs BufferedWriter(Writer) BufferedWriter(Writer, int) • Choisi la taille du buffer • IllegalArgumentException si la taille est négative ou nulle 22 Programmation orientée objet FileWriter et PrintWriter On peut diriger un flux de sortie vers un fichier (on choisit le nom du fichier) FileWriter fw = new FileWriter("fic.txt"); FileWriter permet d’écrire un caractère à la fois void write(int unicode); Pour écrire une chaîne de caractère, il faut écrire tous les caractère un par un Pour écrire un int, il faut aussi le décomposer en caractères ! Pas très pratique : on préfère généralement utiliser un PrintWriter : PrintWriter pw = new PrintWriter(fw); pw.print("message"); 23 Programmation orientée objet Flux sortants : PrintWriter Permet d’écrire facilement dans un Writer void print(T) throws IOException void println(String) throws IOException PrintWriter printf(String, Object...) Constructeurs PrintWriter(Writer) PrintWriter(File) PrintWriter(String) PrintWriter(OutputStream) 24 Programmation orientée objet Écrire dans un fichier sur le disque Il faut choisir un nom pour le fichier: fic.txt Il faut ouvrir un flux de sortie vers le fichier : FileWriter fw = new FileWriter("fic.txt"); On ajoute un buffer (recommandé) BufferedWriter bw = new BufferedWriter(fw); Pour manipuler des types quelconques plutôt que des caractères : PrintWriter pw = new PrintWriter(bw); Pour écrire ? pw.println("Une ligne"); Il faut fermer le flux quand on a fini pw.close(); Et si il y a une erreur lors de l'ouverture, la fermeture, l'écriture ? Une exception est levée, il FAUT l'attraper ! 25 Programmation orientée objet Ecriture d’un fichier texte import java.io.*; public class Ecriture { static public void main(String[] args) { try { FileWriter fw = new FileWriter("fic.txt"); BufferedWriter bw = new BufferedWriter(fw); PrintWriter pw = new PrintWriter(bw); for (int i = 0; i < args.length; i++) { pw.println(i + " " + args[i]); System.out.println(args[i]); } pw.close(); } catch (IOException ex) { // obligatoire ! System.err.println("Erreur sur le fichier"); } } } >java Ecriture je veux écrire ça! 26 Ouvre un flux de sortie Écrit dans le flux Écrit sur la sortie standard Ferme le flux Programmation orientée objet Ecriture d’un fichier texte import java.io.*; public class Ecriture { static public void main(String[] args) { try { FileWriter fw = new FileWriter("fic.txt"); BufferedWriter bw = new BufferedWriter(fw); PrintWriter pw = new PrintWriter(bw); for (int i = 0; i < args.length; i++) { pw.printf("%d %s", i, args[i]); pw.println(); System.out.println(args[i]); } pw.close(); } catch (IOException ex) { // obligatoire ! System.err.println("Erreur sur le fichier"); } } } >java Ecriture je veux écrire ça! 27 Portable! ("\n" ne l’est pas) Ouvre un flux de sortie Écrit dans le flux Écrit sur la sortie standard Ferme le flux Programmation orientée objet Le flux de sortie standard Le champ statique out de la classe System est le flux de sortie standard (par défaut, il est dirigé vers la console) System.out.println("Bonjour"); System.out.print("Bonjour"); Deux méthodes permettent d'écrire des chaînes de caractères void print(String) void println(String) Ces deux méthodes sont surchargées pour tous les types primitifs et le type Object void print(int), void print(double), void print(Object), … avec un Object, la méthode toString est invoquée pour le transformer en String. 28 Programmation orientée objet Le flux d'erreurs standard System.out est utilisé pour afficher les messages d'informations System.err est le flux d'erreurs standard Il doit être utilisé pour afficher des messages d'erreurs Souvent les deux flux sont dirigés vers l'écran Dans les IDE (Eclipse, Netbeans, …), ils sont dirigés vers deux fenêtres séparées ou sont affichés différement public class Standard { static public void main(String[] args) { System.out.println("Ceci est un message normal!"); System.err.println("Ceci est un message d'erreur!"); } } 29 Programmation orientée objet Le flux d’entrée standard System.in est le flux d’entrée standard. int read(byte[] b); La méthode read remplit le tableau b avec les octets lus et renvoie le nombre d'octets lus. C’est un flux d’octets InputStream, pas de facilité d’utilisation. Heureusement, il y a des classes enveloppantes pour traduire les octets en chaînes de caractères : InputStreamReader. 30 Programmation orientée objet Lire un type primitif (avant le JDK 5.0) import java.io.*; public class Lecture uploads/Litterature/ proorob.pdf
Documents similaires










-
45
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Oct 30, 2021
- Catégorie Literature / Litté...
- Langue French
- Taille du fichier 0.6718MB