Accès aux fichiers
Serialisation / Desérialisation
java.io (io pour in
out) est un package qui va nous fournir des classes pour manipuler des
flux de données. On les appelle aussi les classes d'entrées/sorties.
Voici le principe de fonctionnement des entrées /sorties :
1 - Ouverture d'un moyen
de communication
2 - Lecture ou écriture de données
3 - Fermeture du moyen de communication
Il existe de nombreuses sorte
de streams (version anglaise des flux) :
Les streams d'entrée
et les streams de sortie
Les streams de caractères et les streams de données
binaires
les streams de traitement des données et les streams de
communication des données
les streams à accès séquentiel et les streams
à accès direct
les streams avec et sans tampon de données
Voici un classement des différents
streams Java repris du livre d'Antoine Mirecourt : "Le développeur
Java 2".
Les streams de données
binaire
Les treams de communication
FileInputStream
PipedInputStream
ByteArrayInputStream
Les streams de traitement
BufferedInputStream
DataInputStream
PushBackInputStream
SequenceInputStream
ObjectInputStream
Les streams de caractères
Les streams de communication
PipedReader
CharArrayReader
StringReader
FileReader
Les streams de traitement
InputStreamReader
FilterReader
BufferedReader
Toutes les classes qui utilisent
des flux de données binaires héritent de la classe
abstraite InputStream ou OutputStream.
Quelques méthodes d'InputStream :
abstract int read()
int read(byte[] b)
int read(byte[] b, int off, int len)
long skip(long n)
void close()
Quelques méthodes d'OutputStream
:
void write(byte[] b)
void write(byte[] b, int off, int len)
abstract void write(int b)
Toutes les classes qui utilisent
des flux de caractères héritent de la classe abstraite
InputStreamReader ou OutputStreamWriter.
Quelques méthodes d'InputStreamReader :
int read()
int read(char[] cbuf, int off, int len)
Quelques méthodes d'OutputStreamWriter
:
String getEncoding()
void write(char[] cbuf, int off, int len)
void write(int c)
void write(String str, int off, int len)
void write(String str) héritée de Writer.
Accès
aux fichiers
Les classes que l'on va utiliser sont FileInputStream et FileOutputStream
pour manipuler des fichiers binaires tels les images, et FileReader et
FileWriter pour manipuler les fichiers texte.
Exercices :
1 - Ecrire un programme qui effectue la copie d'un fichier texte.
2 - Utilisez un tampon pour accélérer la copie (BufferedReader
et BufferedWriter)
La
Sérialisation / Désérialisation
La sérialiation consiste à convertir un objet Java
en chaine de caractères. La désérialisation
est l'opération inverse, qui consiste à convertir une chaine
de caractère en objet Java. Ces techniques ont plusieurs champ
d'application, notamment le fait de pouvoir sauvegarder l'état
d'un objet sur le disque pour une utilisation ultérieure, ou encore
envoyer un objet Java sur le réseau comme en RMI par exemple.
Exemple de sérialisation :
import java.io.*;
public class Serialisation {
public static void main(String argv[])
{
Animal animal = new Animal("Médor",
"Noir");
try {
FileOutputStream f = new FileOutputStream("niche");
ObjectOutputStream o = new ObjectOutputStream(f);
o.writeObject(animal); o.close();
}
catch (IOException e)
{
System.out.println(e);
}
}
}
Exemple de désérialisation
import java.io.*;
public class Deserialisation {
public static void main(String argv[])
throws ClassNotFoundException {
try {
FileInputStream f = new FileInputStream("niche");
ObjectInputStream o = new ObjectInputStream(f);
Animal animal = (Animal)o.readObject();
o.close();
System.out.println(animal.getNom()+" est "+animal.getCouleur());
}
catch (IOException
e) {
System.out.println(e);
}
}
}
|