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

  • 45
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager