Précédent Suivant

java.io


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);
            }
      }
}

 


Précédent Suivant