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.
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:
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é.
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
|
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
Entrer une ligne: 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);
|
java FileCopy
Nom de fichier a copier: bback.gif |
exemple | Résultat |
import java.io.*;
/** affiche la liste des fichiers d'un repertoire */ public class FileListe{
|
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{
File f = new File(args[0]);
|
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 |
exemple | Résultat |
import java.io.*;
public class FichierManip{
public static void dir() {
|
FichierManip.class
FichierManip.class
FichierManip.class
FichierManip.class FichierManip.class
FichierManip.class
|
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
=
|
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; |
Before: name Pijo age23 num 10 name Pena age19 num 60 After: name Pijo age23 num 20 name Pena age19 num 20 |