Vous êtes sur la page 1sur 7

Iremia, R.

Courdier

Chapitre 5 : IO

Le système d’E/S Java

Java
© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 1

Sommaire

„ Présentation de Java „ Conventions de codage Java


„ La Grammaire AWT : Abstract Window Toolkit
„ Types „ Applet et application
„ Opérateurs et Structures de „ Frame, Panel et Layout
contrôles „ Composants GUI
„ Tableaux „ Gestion des événements
„ Exceptions
„ Le système d’E/S Java
„ Les Objets dans Java
„ Classes, attributs et méthodes „ Les Threads
„ Le polymorphisme et Java „ La Classe Thread et l’interface
Runnable
„ Paquetages
„ Contrôler des threads :
„ Les Classes de bases synchronisation et
„ Chaînes de caractères ordonnancement
„ Outils mathématiques „ La programmation réseau
„ Dates „ Les URL
„ Vecteur et tables de hachages „ Les sockets
„ Java RMI

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 2

03/27/99 1
Iremia, R.Courdier

I/O : classes de lecture et d’écriture de données


sur des supports physiques de données

Java 1.0 class Java 1.1 class Commentaire

InputStream Reader Classe générique de lecture


OutputStream Writer Classe générique d’écriture

FileInputStream FileReader Pour la lecture fichier


FileOutputStream FileWriter Pour l’écriture fichier

StringBufferInputStream StringReader Pour la lecture et écriture de


(pas d’équivalent) StringWriter chaînes de caractères sur fichier

ByteArrayInputStream CharArrayReader Permet a un buffer memoire d’etre


ByteArrayOutputStream CharArrayWriter utilisé en input ou output Stream

PipedInputStream PipedReader Utilisé comme source ou sortie


PipedOutputStream PipedWriter de donnée en multithreading

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 3

I/O : classes de lecture et d’écriture de données

Java 1.0 class Java 1.1 class Commentaire


FilterInputStream FilterReader classe abstraite pour les autres
FilterOutputStream FilterWriter classes de lecture/ecriture

BufferedInputStream BufferedReader permet readLine( )


BufferedOutputStream BufferedWriter evite une ecriture physique à
chaque ecriture (flush())
DataInputStream DataInputStream lect. de types primitifs
(char,int)
DataOutputStream DataOutputStream ecr. de types primitifs (char,int)

PrintStream PrintWriter Pour produire une sortie formatée


Classe très couramment utilisée
LineNumberInputStream LineNumberReader garde la trace du numero de
ligne du fichier
(getlineNumber())
StreamTokenizer StreamTokenizer n’hérite pas de InputStream ou
OutputStream mais travail sur
PushBackInputStream PushBackReader gestion d’un buffer contenat le
dernier carcatère lu
SequenceInputStream SequenceInputStream
RandomAccessFile RandomAccessFile permet de ce déplacer d’un record
© Rémy Courdier
à 1996-2002 - Java I/O- Versionl’autre
du cours 1.2
(seek(), length(), ...) 4

03/27/99 2
Iremia, R.Courdier

I/O : Lecture de fichier simple & lecture


de flots standards

import java.io.*;
System.in public class stdin {
approche UNiX avec : public static void main(String args[]) {
“std input”: System.in try {
System.in est de type // 1a. lecture de lignes en entree:
DataInputStream BufferedReader in =
Un BufferedReader a besoin new BufferedReader(
d’un argument de type Reader new FileReader(args[0]));
c’est pourquoi on passe par un String s, cchar = new String();
InputStreamReader while((s = in.readLine())!= null)
cchar += s + "\n";
in.close();
BufferedReader // 1b. lecture du flot d’entree standard:
Pour augmenter les BufferedReader stdin =
performances de lecture on new BufferedReader(
passe le fichier au new InputStreamReader(System.in));
constructeur d’une classe qui System.out.print("Entrer une ligne:");
utilise un buffer de lecture System.out.println(stdin.readLine());
physique } catch(IOException e) {
e.printStackTrace();
} }}

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 5

I/O : écriture de fichier simple & lecture


de flots standards import java.io.*;
class Redirection {
public static void main(String args[]) {
try {
BufferedInputStream in =
System.out & System.err new BufferedInputStream(
approche UNiX avec : new FileInputStream(
“std output “: "Redirection.java"));
System.out PrintStream err =
“error output”: new PrintStream(
System.err new BufferedOutputStream(
new FileOutputStream("err.out")));
System.setIn(in);
Redirection par l’appel à des System.setErr(err);
méthodes de classes de la BufferedReader br =
classe System new BufferedReader(
setIn(InputStream) new InputStreamReader(System.in));
setOut(PrintStream) while((String s = br.readLine()) != null) {
setErr(PrintStream) System.out.println(s);
System.err.println(s);
}
out.close(); // en securite
} catch(IOException e) {e.printStackTrace();}
}}

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 6

03/27/99 3
Iremia, R.Courdier

I/O : Manipultaion de fichiers et de répertoires


La classe File

import java.io.*;
/**
* affiche la liste des fichier
Attention !!!
* d’un repertoire
*/
La classe File ne public class FileListe {
public static void main(String args[]) {
represente pas un
try {
pointeur sur le fichier File path = new File(".");
mais seulement le String[] list = path.list();
nom d’un fichier ou for(int i = 0; i < list.length; i++)
d’un ensemble de System.out.println(list[i]);
} catch(Exception e) {
fichiers dans un
e.printStackTrace();
répertoire }
}
}

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 7

I/O : Manipulation de fichiers


Création, renommage et suppression de fichiers

...
import java.io.*; public static void main(String args[]){
public class FileExemple { if(args[0].equals("-r")) {
private static void infoFic (File f){ if(args.length!=3) System.exit(1);
System.out.println( File
"path: " + f.getAbsolutePath() + ancien = new File(args[1]),
"\n read: " + f.canRead() + nouveau = new File(args[2]);
"\n write: " + f.canWrite() + ancien.renameTo(nouveau);
"\n Name: " + f.getName() + infoFic(ancien );
"\n Parent: " + f.getParent() + infoFic(nouveau);
"\n Path: " + f.getPath() + } else {
"\n length: " + f.length() + if(args.length!=2) System.exit(1);
"\n Modif.: " + f.lastModified()); File f = new File(args[1]);
if(f.isFile()) if(args[0].equals("-d"))
System.out.println("fichier"); if(f.exists()) f.delete();
else if(f.isDirectory()) if(args[0].equals("-c")) {
System.out.println("repertoire"); if(f.exists()) System.exit(1);
} f.mkdirs();
... }
infoFic(f);
}

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 8

03/27/99 4
Iremia, R.Courdier

I/O : La compression de fichiers


import java.io.*;
import java.util.zip.*;
public class FichierGzip {
public static void main(String args[]) {
try {
BufferedReader in =
new BufferedReader(
Java fournit les new FileReader(args[0]));
BufferedOutputStream out =
algorithmes des 2 new BufferedOutputStream(
techniques de new GZIPOutputStream(
compression new FileOutputStream("fic.gz")));
System.out.println("ecriture du fichier");
communément while((int c = in.read()) != -1)
utilisées : out.write(c);
Zip in.close(); out.close();
System.out.println("Reading file");
GZIP BufferedReader inBis =
new BufferedReader(
new InputStreamReader(
new GZIPInputStream(
new FileInputStream("fic.gz"))));
while((String s = inBis.readLine()) != null)
System.out.println(s);
} catch(Exception e) { e.printStackTrace();}
}}
© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 9

I/O: Persistance d’objets


les mécanismes de “sérialisation” d’objets

la Classe ObjectOutputStream
classe du package java.io : implémente les méthodes pour “serialiser” des objets,
des tableaux, et les types de base dans un output stream
Principales méthodes :
writeObject() // sauve un objet et les objets qu’il référence
defaultWriteObject() // utilisé lors des sauvegardes personnalisées

la Classe ObjectInputStream
classe du package java.io : implémente les méthodes pour “déserialiser” des
objets, des tableaux, et les types de base dans un output stream
Principales méthodes :
readObject() //lit un objet et les objets qu’il référence
defaultReadObject() //utilisé lors des lectures personnalisées

Toutes les méthodes de ces classes peuvent provoquer une


IOException

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 10

03/27/99 5
Iremia, R.Courdier

I/O: Persistance d’objets


Exemple simple de sauvegarde
import java.awt.*;
import java.io.*;
import java.util.*;
public class sauvegarde {
public static void main(String args[]) {
try {
Vector v = new Vector();
v.addElement(“sauvegarde”);
v.addElement(new Integer(10));
v.addElement(new Rectangle
(10,10,150,100));
System.out.println(v);
FileOutputStream fos =
new FileOutputStream (sauve.data);
ObjectOutputStream oos = Output :
new ObjectOutputStream (fos);> java sauvegarde
oos.writeObject(v); > [sauvegarde, 10, java.awt.rectangle
oos.flush(); x=10,y=10,width=150,height=100]
oos.close(); //securite
} catch(Exception e) {
System.out.println (“erreur : + e)
}
}}

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 11

I/O: Persistance d’objets


Exemple simple de lecture

import java.io.*;
public class lecture {
public static void main(String args[]) {
try {
FileInputStream fis =
new FileInputStream (arg[0]);
ObjectInputStream ois =
new ObjectInputStream (fis);
Object unObjet = ois.readObject();
fis.close(); // securite
} catch(Exception e) {
System.out.println (“erreur : + e)
}
}
} Output :
> java lecture
> [sauvegarde, 10, java.awt.rectangle
x=10,y=10,width=150,height=100]

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 12

03/27/99 6
Iremia, R.Courdier

I/O: Persistance d’objets


serialisation personnalisées (“custom”)

le mot clé transient :


Les variables précédés du mot clés transient ne sont pas sauvegardée
private transient int compteur;

Les variables static partagées entre toutes les instances ne sont pas
sauvegardées. il faut les gérer de manière particulière
surcharger les méthodes writeObject(...) et readObject(...)
private void writeObject(ObjectOutputStream oos) {...
oos.defaultWriteObject();
if (...) oos.writeBoolean (unBoolStatic);
...} // dans cet exemple les exceptions sont non gérées

Certaines classes ne sont pas “sérialisables” et provoque une


exception NotSerializableException : ceci indique que l’interface
serializable n’est pas implémentée dans la classe en question
ex. la classe Thread n’implémente pas cette interface

© Rémy Courdier 1996-2002 - Java I/O- Version du cours 1.2 13

03/27/99 7