Entrés Sorties
1
Entrées Sorties
Modem3G
Modem3G
Programme Ficher
Fichier Strea
ms
d’entré
Stream
e
Clavier s de Imprimante
sortie
Un autre Programme
Moniteur
Stream
s De
sortie
Stream
s
D’entr 2
ée
Principe des
entrées/sorties
Pour effectuer une entrée ou une sortie de données en Java,
le principe est simple et se résume aux opérations suivantes :
Ouverture d'un moyen de communication.
Écriture ou lecture des données.
Fermeture du moyen de communication.
En Java, les moyens de communication sont représentés par
des objets particuliers appelés (en anglais) stream. Ce mot,
qui signifie courant, ou flot
3
Streams
Streams
Communication Traitement
Binaires Caractères B C
InputStream OutputStream Reader Writer IS OS R W
E.B S.B E.C S.C E.B S.B E.C
S.C
Il existe deux types de streams:
Streams de Communication: établit une liaison entre le
programme et une destination.
Streams binaires : Exemple FileInputStream,
FileOutputStream
Streams de caractères : Exemple FileReader, FileWriter
Streams de Traitement : Permet de traiter les information des
streams de communication.
Streams binaires : ex BufferedInputStream, ZipInputStream,
ZipOutputStream,…
Streams de caractères : BufferedReader, BufferedWriter, … 4
La classe File
La classe File permet de donner des
informations sur un fichier ou un répertoire
La création d’un objet de la classe File
peut se faire de différentes manières :
f1=new File("c:/projet/
File fichier.ext");
f2=new File("c:/projet",
File "fihier.ext");
f3=new File("c:/projet");
File
5
Principales méthodes de la classe
File
String getName(); Retourne le nom du fichier.
String getPath(); Retourne la localisation du fichier en relatif.
String getAbsolutePath(); Idem mais en absolu.
String getParent(); Retourne le nom du répertoire parent.
boolean renameTo(File newFile); Permet de renommer un fichier.
boolean exists() ; Est-ce que le fichier existe ?
boolean canRead(); Le fichier est t-il lisible ?
boolean canWrite(); Le fichier est t-il modifiable ?
boolean isDirectory(); Permet de savoir si c'est un répertoire.
boolean isFile(); Permet de savoir si c'est un fichier.
long length(); Quelle est sa longueur (en octets) ?
boolean delete(); Permet d'effacer le fichier.
boolean mkdir(); Permet de créer un répertoire.
String[] list(); On demande la liste des fichiers localisés dans le répertoire.
6
Premier Exemple d’utilisation de la
classe File
Afficher le contenu d’un répertoire en affichant si les éléments de ce
répertoire sont des fichier ou des répertoires.
Dans le cas ou il s’agit d’un fichier afficher la capacité physique du
fichier.
import java.io.File; Fichier :aff2 (2).asm Size:12
public class Fichier :aff2.asm Size:8
Application1 { REP:And
REP:androideProjets
public static void main(String[] REP:AP
args) { String rep="c:/"; File REP:APP
f=new File(rep); if(f.exists()){ Fichier :aqua_bitmap.cpp
Size:15
String[] contenu=f.list(); Fichier :autoexec.bat
for(int i=0;i<contenu.length;i+ Size:12
+){ File f2=new
File(rep,contenu[i]);
if(f2.isDirectory())
System.out.println("REP:"+cont
enu[i]);
else
System.out.println("Fichier :"+contenu[
i]+" Size:"+contenu[i].length());
}
}
} else{
} System.out.println(rep+" n'existe 7
pas");
}
Lire et Écrire sur un fichier texte
fr:FileRead f1:Fil
er e
Fichier1.txt
read():int
fw:FileWrit f2:Fil
er e
Fichier2.txt
write(int c):void
File f1=new
File("c:/Fichier1.txt");
FileReader fr=new
FileReader(f1); File f2=new
File("c:/Fichier2.txt");
FileWriter fw=new
FileWriter(f2); int c;
while((c=fr.read())!=-
1){ fw.write(c);
}
fr.close();fw.close();
4
0
Exemple 1 : Crypter un
fichier
Texte
Considérons un fichier texte nommé « operations.txt » qui contient
les opérations sur un compte.
Chaque ligne de ce fichier représente une opérations qui est définie
par :
le numéro de l’opération,
le numéro de compte,
la date d’opération,
le type d’opération (Versement ou Retrait)
et le montant de l’opération.
Voici un exemple de fichier :
321;CC1;2011-01-11;V;4500
512;CC1;2011-01-11;V;26000
623;CC1;2011-01-11;R;9000
815;CC1;2011-01-11;R;2500
9
Exemple 1 : Crypter un
fichier Texte
import java.io.File;
import
java.io.FileReader;
import
java.io.FileWriter;
public class App2 {
public static void main(String[] args) throws
Exception
File f2=new{ File f1=new File("operations.txt"); operations.txt
File("operationsCryptes.txt");
FileReader
FileWriter fr=new
fw=new FileReader(f1); 321;CC1;2011-01-11;V;4500
FileWriter(f2); int c; 512;CC1;2011-01-11;V;26000
623;CC1;2011-01-11;R;9000
while((c=fr.read())!=-
815;CC1;2011-01-11;R;2500
1)
{ fw.write(c+1); operationsCryptes.txt
}
fr.close();
432<DD2<3122.12.22<W<5611623<DD2<3122.12.22<W<37111734<DD2<
fw.close();
} 3122.12.22<S<:111926<DD2<3122.12.22<S<3611
}
1
0
Lire et Écrire sur un fichier binaire
fis:FileInputStream f1:Fil
e
image1.jp
read():int g
fos:FileOutputStre f2:Fil
am e
image2.jpg
File f1=new File("c:/image1.jpg");
write(int c ):void
FileInputStream fis=new
FileInputStream(f1); File f2=new
File("c:/image2.jpg"); FileOutputStream
fos=new FileOutPutStream(f2); int c;
while((c=fis.read())!=-
1){ fos.write(c);
}
fis.close();fos.close();
1
1
Lire et Écrire sur un fichier texte ligne par ligne :
Streams de traitement : BufferedReader et
BufferedWriter
br:BufferedRead fr:FileRead f1:Fil
er er e
Fichier1.t
readLine():Stri read():in xt
ng t
bw:BufferedWrit fw:FileWrit f2:Fil
er er e
Fichier2.t
write(String s):void
xt
newLine():void write(int c):void
File f1=new File("c:/Fichier1.txt");
FileReader fr=new FileReader(f1);
BufferedReader br=new
BufferedReader(fr); File f2=new
File("c:/Fichier2.txt"); FileWriter
fw=new FileWriter(f2); BufferedWriter
bw=new BufferedWriter(fw); String s;
while((s=br.readLine())!
=null)
}
{ bw.write(s);bw.newLine
br.close();bw.close( 12
();
);
Exemple 3 : Afficher le total
des opérations de
versements et de retraits
import java.io.*;
public class
App3 {
public static void main(String[] args) throws
Exception { File f=new File("operations.txt");
FileReader fr=new FileReader(f);
BufferedReader br=new
BufferedReader(fr);
String op;double totalVersements=0;double
totalRetraits=0; while((op=br.readLine())!=null){
String[] tabOp=op.split(";");
String typeOp=tabOp[3];
double
montant=Double.parseDouble(tabOp[4]);
if(typeOp.equals("V"))
totalVersements+=montan
t; else
totalRetraits+=montan
} t;
} }
13
System.out.println("Total
Versement:"+totalVersements);
System.out.println("Total
Compression ZIP : Stream de traitement :
ZipOutputStream
bis:BufferedInputStre fis:FileInputStrea f1:Fil
am m e
Fichier.do
read():i read():i c
nt nt
zos:ZipOutputStre bos:BufferedOutputStre fos:FileOutputStre f2:Fil
am am am
write():void e
setMethod():v
Fichier.z
oid
putNextEntry():v write(int c):void ip
oid read():int
File f1=new File("c:/","Fichier.doc");
FileInputStream fis=new
FileInputStream(f1);
BufferedInputStream bis=new
BufferedInputStream(fis); File f2=new
File("Fichier.zip");
FileOutputStream fos=new FileOutputStream(f2);
BufferedOutputStream bos=new
BufferedOutputStream(fos); ZipOutputStream
zos=new ZipOutputStream(bos);
zos.setMethod(ZipOutputStream.DEFLATED);
zos.putNextEntry(new ZipEntry(f1.getName()));
int c;
}
while ((c=bis.read())!=-
zos.close();bis.close
();1){ zos.write(c);
Exemple 4 : Compression d’un fichier
import java.io.*;import
java.util.zip.*; public class App4
{
public static void main(String[] args) throws
Exception { File f1=new File("fichier.doc");
FileInputStream fis=new FileInputStream(f1);
BufferedInputStream bis=new
BufferedInputStream(fis); File f2=new
File("fichier.zip");
FileOutputStream fos=new FileOutputStream(f2);
BufferedOutputStream bos=new
BufferedOutputStream(fos); ZipOutputStream
zos=new ZipOutputStream(bos);
zos.setMethod(ZipOutputStream.DEFLATED);
zos.putNextEntry(new ZipEntry(f1.getName()));
int c;
while((c=bis.read())!=-
1){ zos.write(c);
}
bis.close();
} zos.close();
1
}
System.out.println("Capac 5
ite de "+f1.getName()+"
Décompression ZIP : Stream de traitement :
ZipInputStream
zos:ZipInputStre bis:BufferedInputStre fis:FileInputStrea f1:Fil
am am m
read():int e
getNextEntr
Fichier.z
y() read():i read():i ip
nt nt
bos:BufferedOutputStre fos:FileOutputStre f2:Fil
am am
e
Fichier.doc
write(int c):void read():int
File f1=new File("Fichier.zip");
FileInputStream fis=new
FileInputStream(f1);
BufferedInputStream bis=new
BufferedInputStream(fis); ZipInputStream
zis=new ZipInputStream(bis);
ZipEntry
ze=zis.getNextEntry(); File
f2=new File(ze.getName());
FileOutputStream fos=new FileOutputStream(f2);
bos.write(c
BufferedOutputStream bos=new
});
BufferedOutputStream(fos); int c; 41
zis.close();bos.close
while ((c=zis.read())!=-1){ 86
();
Exemple 5 : Décompression d’un
fichier
import zip
java.io.*;import
java.util.zip.*; public class App5
{
public static void main(String[] args)throws
Exception { File f1=new File("fichier.zip");
FileInputStream fis=new FileInputStream(f1);
BufferedInputStream bis=new
BufferedInputStream(fis); ZipInputStream
zis=new ZipInputStream(bis);
ZipEntry
ze=zis.getNextEntry(); File
f2=new File(ze.getName());
FileOutputStream fos=new FileOutputStream(f2);
BufferedOutputStream bos=new
BufferedOutputStream(fos); int c;
while((c=zis.read())!=-
1){ bos.write(c);
}
zis.close();
}
} bos.close(); 4
9
System.out.println("Capac
ite de "+f1.getName()+"
Les flux de données prédéfinis (1)
Il existe 3 flux prédéfinis :
• l'entrée standard System.in (instance de InputStream)
• la sortie standard System.out (instance de PrintStream)
• la sortie standard d'erreurs System.err(instance de PrintStream)
try {
int c;
while((c = System.in.read()) != -1) {
System.out.print(c);
}
} catch(IOException e) {
System.out.print(e);
}
Les flux de données prédéfinis (2)
try {
Reader reader = new InputStreamReader(System.in);
BufferedReader keyboard = new BufferedReader(reader);
System.out.print("Entrez une ligne de texte : ");
String line = keyboard.readLine();
System.out.println("Vous avez saisi : " + line);
} catch(IOException e) {
System.out.print(e);}
La classe Scanner
Une classe injustement méconnue du JDK est Scanner (depuis la
verison 5 de Java)
fonctionnalités très intéressantes pour parser des chaînes de
caractères, et en extraire et convertir les composants.
Un Scanner peut se brancher sur à peu près n'importe quelle
source : InputStream, Readable (et donc Reader), File... et bien sûr
une simple String.
Ensuite utiliser les méthodes de type hasNext...() / next...(), ou alors
les méthodes de type find...()
Scanner sc = new Scanner(System.in);
int i = sc.nextInt();
2
0
2
1
La sérialisation
La sérialisation est une opérations qui permet d’envoyer un
objet sous forme d’une tableau d’octets dans une sortie
quelconque (Fichier, réseau, port série etc..)
Les applications distribuées utilisent beaucoup ce concept
pour échanger les objets java entre les applications via le
réseau.
Pour sérialiser un objet, on utiliser la méthode writeObject() de la
classe ObjectOutputStream
La désérialisation est une opération qui permet de reconstruire
l’objet à partir d’une série d’octets récupérés à partir d’une
entrée quelconque.
Pour dé sérialiser un objet, on utilise la méthode readObject()
de la classe ObjectInputStream.
Pour pouvoir sérialiser un objet, sa classe doit implémenter
l’interface Serializable
Pour designer les attributs d’un objet qui ne doivent pas
être 2
2
sérialisés, on doit les déclarer transient
Exemple d’une classe
package metier;
Serializable
import
java.io.Serializable;
import java.util.Date;
public class Operation implements
Serializable { private int
numeroOperation;
private transient Date
dateOperation; private String
numeroCompte;
private String
typeOperation; private
double
public montant;
Operation(int numOp, Date dateOp, String to, mt)
numC,String
this.numeroOperation = numOp;this.dateOperation = double {
dateOp;
public this.numeroCompte
Operation() { } = numC;this.typeOperation
= to; this.montant = mt;
}
// Getters et Setters
}
2
3
Sérialisation
oos:ObjectOutputStre fos:FileOutputStre f:Fil
am am e
banque.t
writeObject(Object write(int xt
o):void c)
import java.io.*;import
java.util.Date; import
metier.Operation;
public class Serialisation {
public static void main(String[] args) throws Exception {
Operation op1=new Operation(1,new Date(), "CC1", "V",
40000); Operation op2=new Operation(2,new Date(),
"CC1", "R", 6000); File f=new File("banque.txt");
FileOutputStream fos=new FileOutputStream(f);
ObjectOutputStream oos=new
ObjectOutputStream(fos); oos.writeObject(op1);
oos.writeObject(op2);
oos.close();
}
}
2
4
DéSérialisation
ois:ObjectInputStre fis:FileInputStrea f:Fil
am m e
banque.t
readObject():Obje read():i xt
ct nt
import java.io.*;
import
metier.Operation;
public class
Deserialisation {
public static void main(String[] args) throws
Exception { File f=new File("banque.txt");
FileInputStream fis=new FileInputStream(f);
ObjectInputStream ois=new
ObjectInputStream(fis); Operation
op1=(Operation) ois.readObject(); Operation
op2=(Operation) ois.readObject();
System.out.println("Num:"+op1.getNumeroOperation
());
System.out.println("Date:"+op1.getDateOperation(
));
System.out.println("Compte:"+op1.getNumeroCompte
()); 2
5
System.out.println("Type:"+op1.getTypeOperation(
));