page précédantetable des matières

Entrées-sorties

 La POO utilise des flots (stream) pour traiter les entrées-sorties:


 

Il existe un grand nombre(même un peu trop) des classes pour les entrées - sortie en Java . En plus il y a deux approches différentes - de Java 1.0 basée sur la circulation des octets  et de Java 1.1 basée sur les caractères unicode.
 

Classes de lecture et d'écriture des données sur des supports physiques (niveau bas)


 La plupart des classes qui manipulent des flots d'octets sont dérivés de l'une des deux classes abstraites InputStream et OutputStream. Les méthodes qui peuvent être appliquées sur un tel flot pour lire des octets sont les suivantes:

Les méthodes disponible pour écrire sont les suivant:

 

 La plupart des classes qui manipulent des caractères sont dérivés de l'une des deux classes abstraites Reader et Writer. Les méthodes qui peuvent être appliquées sur un tel flot sont très semblable à celles de les classes précédentes seul le type des données lues est différent. Pour lire des caractères sont les suivantes:

Les méthodes disponible pour écrire sont les suivant:

 

Classes de lecture et d'écriture des données (les filtres, niveau haut)

Un filtre est un flot particulier qui enveloppe un autre flot. Les données lues dans un filtre proviennent du flot enveloppé. Le filtre peut effectuer différents traitements sur les données lues dans le flot enveloppé avant de les transmettre. Il peut le placer dans un tampon, les coder, etc. Inversement dans le cas d'un filtre en écriture, les données peuvent être transformées avant d'être écrites dans le flot enveloppé.


 
 

Lecture du fichier texte et lecture de flots standards

 
exemple lancement avec:
java stdin stdin.java

import java.io.*;
public class stdin {
   public static void main(String arg[]) {
      try {
         // lecture de lignes en entree
         BufferedReader in = new BufferedReader(
                              new FileReader(arg[0]));
         String tampon,s=new String();
         while(( tampon=in.readLine()) != null)
             s += tampon + "\n";
         in.close();

         System.out.println(s);

         // lecture du flot d'entree standart
         BufferedReader stdin = new BufferedReader(
                           new InputStreamReader(System.in));
         System.out.print("Entrer une ligne: ");
         System.out.println(stdin.readLine());
       }
       catch(IOException e) {
          e.printStackTrace();
       }
    }
}


import java.io.*;
public class stdin {
   public static void main(String arg[]) {
      try {
         // lecture de lignes en entree
         BufferedReader in = new BufferedReader(
                              new FileReader(arg[0]));
         String tampon,s=new String();
         while(( tampon=in.readLine()) != null)
             s += tampon + "\n";
         in.close();

         System.out.println(s);

         // lecture du flot d'entree standart
         BufferedReader stdin = new BufferedReader(
                             new InputStreamReader(System.in));
         System.out.print("Entrer une ligne: ");
         System.out.println(stdin.readLine());
       }
       catch(IOException e) {
          e.printStackTrace();
       }
    }
}

Entrer une ligne: ligne d'entree
ligne d'entree

Remarques:
System.in est de type "DataInputStream". Un "BufferedReader" a besoin d'un argument de type "Reader". C'est pourquoi on passe par un "InputStreamReader".

La classe "BufferedReader" utilise un tampon de lecture phisique est permet l'utilisation de "readLine()"
 

Lecture  et écriture du fichier binaire

 
exemple Résultat
import java.io.*;
   public class FileCopy {
      public static void main(String arg[]) {
         int octet;
         try {

            System.out.print("Nom de fichier a copier: ");
            // lecture du flot d'entree standart
            BufferedReader stdin = new BufferedReader(new  InputStreamReader(System.in));
            String s =stdin.readLine();

            //Creer nouveau nom
            String sn= "CopyOf"+s;
            System.out.println("copy the file "+s+" in the file "+sn);
            FileInputStream fi = new FileInputStream(s);
            FileOutputStream fo = new FileOutputStream(sn);


            while((octet= fi.read())!=-1)fo.write(octet);

            stdin.close();
            fi.close();
            fo.close();
            System.out.println("created");
         }
         catch(IOException e) {
         System.out.println("Error:"+e);;
      }
   }
}

java FileCopy

Nom de fichier a copier: bback.gif
copy the file bback.gif in the file CopyOfbback.gif
created

La classe File

Liste d'une répertoire.
 
exemple Résultat
import java.io.*;
/** affiche la liste des fichiers d'un repertoire */

public class FileListe{
   public static void main(String args[]) {
      try{
         File path = new File(".");
         String[] list = path.list();
         for(int i = 0; i < list.length; i++)
          System.out.println(list[i]);
      } catch (Exception e) {
         e.printStackTrace();
      }
    }
}

stdin.java
io.html
read_stream.gif
write_stream.gif
io_bases_classes.gif
io_classes.gif
stdin.class
FileListe.java
FileInfo.java
FileListe.class
FileInfo.class

Information sur le fichier
 
exemple  lancement avec
java FileInfo FileInfo.java
import java.io.*;
import java.util.*;
/** affiche les caracteristiques d'un fichier */

public class FileInfo{
   public static void main(String args[]) {
      if(args.length == 0){
         System.out.println(
                "Usage FileInfo <FilePath> ");
         return;
      }

      File f = new File(args[0]);
      System.out.println(
            " Abs path: " + f.getAbsolutePath() +
            "\n write: " + f.canWrite() +
            "\n read: " + f.canRead() +
            "\n Name: " + f.getName() +
            "\n Length: " + f.length() +
            "\n Parent " + f.getParent() +
            "\n Path: " + f.getPath() +
            "\n Modif: " + 
                            new Date(f.lastModified()));
      if(f.isFile())
            System.out.println("fichier");
      else if(f.isDirectory())
            System.out.println("repertoire");
   }
}

Abs path: E:\My_Documents\JAVA\CoursJava(my)\io\FileInfo.java
 write: true
 read: true
 Name: FileInfo.java
 Length: 855
 Parent null
 Path: FileInfo.java
 Modif: Tue May 14 10:30:44 GMT+03:00 2002
fichier

 

Création, renommage et suppression de fichiers

 
exemple Résultat
import java.io.*;

public class FichierManip{
   public static void main(String args[]) {
      File nouveau = new File("Test.txt");
      File change = new File("Test_change.txt");
      dir();
      try{
         nouveau.createNewFile();
      }catch (IOException e) {e.printStackTrace();}
      dir();
      nouveau.renameTo(change);
      dir();
      change.delete();
      dir();
      nouveau.mkdirs();
      dir();
      nouveau.delete();
      dir(); 
   }

   public static void dir() {
      try{
         File repert = new File(".");
         String[] liste = repert.list();
         for(int i = 0; i< liste.length; i++)
            System.out.println(liste[i]);
         System.out.println("\n");
      } catch (Exception e) { e.printStackTrace();  }
   }
}

FichierManip.class

FichierManip.class
Test.txt

FichierManip.class
Test_change.txt

FichierManip.class

FichierManip.class
Test.txt

FichierManip.class

 


 

Persistence d'objets. Les mécanismes de "sérialisation" d'objets


 
 

exemple - sauvegarde

 
import java.io.*;
import java.awt.*;
import java.util.*;
public class serialisation {
   public static void main(String arg[]) {
      try {
         Vector v = new Vector();
         v.addElement("Chaine de caracteres");
         v.addElement(new Integer(15));
         v.addElement(new Button("test"));

         FileOutputStream fos =
            new FileOutputStream ("sauvegarde.dat");
         ObjectOutputStream oos =
            new ObjectOutputStream (fos);
         oos.writeObject(v);
         oos.flush();
         oos.close();
      }catch (IOException e) {
         System.out.println("erreur: " +e);
      }
   }
}

lecture du fichier:

 
exemple Résultat
import java.io.*;
import java.awt.*;
import java.util.*;
public class lecture {
   public static void main(String arg[]) {
      try {
         FileInputStream fis =
            new FileInputStream ("sauvegarde.dat");
         ObjectInputStream ois =
            new ObjectInputStream (fis);
         Vector v = (Vector)ois.readObject();
         System.out.println((String)(v.elementAt(0)));
         System.out.println ("" + (Integer)(v.elementAt(1)));
         System.out.println("" + (Button)(v.elementAt(2)));
         ois.close();
      }catch (Exception e) {
         System.out.println("erreur: " +e);
      }
   }
}
Chaine de caracteres
15
java.awt.Button[button0,0,0,0x0,invalid,label=test]

 

 Deuxième exemple:
a)
sauvegarde et lecture:

exemple résultat
import java.io.*;

class Store implements Serializable{
   String name="Pijo";
   int age= 23;
   static int num=10;
   public static void main(String a[]){
      Store p1 = new Store();
      Store p2 = new Store();
      p2.name= "Pena";
      p2.age = 19;
      System.out.println("\nBefore:");
      System.out.println("name "+p1.name+" age"+p1.age+" num "+p1.num);
      p2.num = 60;
      System.out.println("name "+p2.name+" age"+p2.age+" num "+p1.num);

      try{
         FileOutputStream fos= new FileOutputStream("test.dat");
         ObjectOutputStream oos = new ObjectOutputStream(fos);
         oos.writeObject(p1);
         oos.writeObject(p2);
         oos.flush();
         oos.close();
      }catch (IOException e){
          System.out.println(""+e);
      }

      Store.num=20;
      try{
         FileInputStream fis= new FileInputStream("test.dat");
         ObjectInputStream ois = new ObjectInputStream(fis);
         Store p3 = (Store)ois.readObject();
         Store p4 = (Store)ois.readObject();
         ois.close();
         System.out.println("\nAfter:");
         System.out.println("name "+p3.name+" age"+p3.age+" num "+p3.num);
         System.out.println("name "+p4.name+" age"+p4.age+" num "+p4.num);
      }catch (Exception e){
          System.out.println(""+e);
      }
   }
}

Before:
name Pijo age23 num 10
name Pena age19 num 60

After:
name Pijo age23 num 20
name Pena age19 num 20
 

b)lecture seulement:

exemple résultat
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class ReadOnly {
    public static void main(String[] a){
        try{
            FileInputStream fos= new FileInputStream("test.dat");
            ObjectInputStream ois = new ObjectInputStream(fis);
            Store p3 = (Store)ois.readObject();
            Store p4 = (Store)ois.readObject();
            ois.close();
            System.out.println("\nRead Only:");
            System.out.println("name "+p3.name+" age"+p3.age+" num "+p3.num);
            System.out.println("name "+p4.name+" age"+p4.age+" num "+p4.num);
        }catch (Exception e){
             System.out.println(""+e);
        }
    }
}

Read Only:
name Pijo age23 num 10
name Pena age19 num 10
 

Troisième exemple:

exemple résultat
import java.io.*;
class Thing implements Serializable{
            int age;
            Thing(){
                        age = 15;
            }
}
class Person extends Thing implements Serializable{
            String name="Pijo";
            static int num=10;        
}
class Store {
   public static void main(String a[]){
      Person p1 = new Person();
      Person p2 = new Person();
      p2.name= "Pena";
      p2.age = 19;
      System.out.println("\nBefore:");
      System.out.println("name "+p1.name+" age"+p1.age+" num "+p1.num);
      p2.num = 60;
      System.out.println("name "+p2.name+" age"+p2.age+" num "+p1.num);
      try{
         FileOutputStream fos= new FileOutputStream("test.dat");
         ObjectOutputStream oos = new ObjectOutputStream(fos);
         oos.writeObject(p1);
         oos.writeObject(p2);
         oos.flush();
         oos.close();
      }catch (IOException e){
          System.out.println(""+e);
      }

      Person.num=20;
      try{
         FileInputStream fis= new FileInputStream("test.dat");
         ObjectInputStream ois = new ObjectInputStream(fis);
         Person p3 = (Person)ois.readObject();
         Person p4 = (Person)ois.readObject();
         ois.close();
         System.out.println("\nAfter:");
         System.out.println("name "+p3.name+" age"+p3.age+" num "+p3.num);
         System.out.println("name "+p4.name+" age"+p4.age+" num "+p4.num);
      }catch (Exception e){
          System.out.println(""+e);
      }
   }
}

Before:
name Pijo age23 num 10
name Pena age19 num 60

After:
name Pijo age23 num 20
name Pena age19 num 20


 

page précédantetable des matières