Bonjour,
Je dois préparer un petit document sur la manipulation de fichiers en Java. Le package IO est très riche et il m'est difficile de choisir un jeu réduit de classes permettant de simplifier le travail du développeur.
Ce document est destiné à des débutants.
J'ai retenu un certain nombre de méthode de travail qui me semblent très générales. Pouvez-vous me dire ce que vous pensez de mes choix ?
je vous remercie d'avance pour vos remarques et suggestion.
Pour les fichier texte:
Pour les fichiers binaires:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public void writeText()throws IOException{ // Ecriture d'un fichier texte PrintWriter f1=new PrintWriter(new FileWriter("c:/test.txt")); f1.println("1 Albert"); f1.println("2 Bernard"); f1.close(); } public void addText()throws IOException{ // Ecriture d'un fichier texte PrintWriter f=new PrintWriter(new FileWriter("c:/test.txt",true)); f1.println("3 Claude"); f1.println("4 Daniel"); f.close(); } public void readText()throws IOException{ // Lecture d'un fichier texte BufferedReader f=new BufferedReader(new FileReader("c:/test.txt")); String s; s = f.readLine(); while( s != null){ System.out.println(s); s = f.readLine(); } f.close(); } public void readFormattedText()throws IOException{ // Lecture d'un fichier texte Scanner f=new Scanner(new FileReader("c:/test.txt")); String s; int n; while( f.hasNext() ){ n = f.nextInt(); s = f.nextLine(); System.out.printf("<%d> <%s>\n",n,s); } f.close(); }
Pour les fichiers d'objets:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public void save( DataOutputStream f, Personne p )throws IOException{ f.writeLong( p.getMatricule() ) ; f.writeUTF( p.getNom() ) ; f.writeBoolean( p.getMarie() ) ; f.writeDouble( p.getTaille() ) ; } // Lit une Pers. Retourne null si EOF public Personne load( DataInputStream f ){ Personne p = null ; try{ long matricule = f.readLong() ; String nom = f.readUTF(); boolean marie = f.readBoolean(); Double taille = f.readDouble(); p = new Personne(matricule,nom,marie,taille) ; } catch( IOException e ){ } return p ; } public void writeBinary()throws IOException{ // Ecriture du fichier DataOutputStream f = new DataOutputStream( new FileOutputStream("c:/test.dat") ); save( f, new Personne(11,"Albert",true,1.23) ) ; save( f, new Personne(22,"Bernard",false,1.8) ) ; f.close() ; } public void readBinary()throws IOException{ DataInputStream f = new DataInputStream( new FileInputStream("c:/test.dat") ); Personne p ; p = load(f) ; while( p!=null ){ System.out.println( p ) ; p = load(f) ; } f.close() ; } public void addBinary()throws IOException{ // Ecriture du fichier DataOutputStream f = new DataOutputStream( new FileOutputStream("c:/test.dat",true)); save( f, new Personne(33,"Claude",true,1.23) ) ; save( f, new Personne(44,"Daniel",false,1.8) ) ; f.close() ; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53 // La classe Peronne implémente Serializable public void writeObject()throws IOException{ // Ecriture du fichier ObjectOutputStream f = new ObjectOutputStream( new FileOutputStream("c:/test.dat") ); f.writeObject(new Personne(11,"Albert",true,1.23)); f.writeObject(new Personne(22,"Bernard",false,1.8)); f.close() ; } public void readObject()throws Exception{ ObjectInputStream f = new ObjectInputStream( new FileInputStream("c:/test.dat") ); Personne p ; boolean eof = false; while( !eof ) { try { p = (Personne)f.readObject(); System.out.println( p ) ; } catch(EOFException e) { eof = true; } } f.close() ; } public void addObject()throws Exception{ // Le mode append ne fonctionne pas à cause de l'en-tête posé au début de l'écriture. // Il faut donc effectuer un mutation par copie dans un fichier temporaire ObjectInputStream fLu = new ObjectInputStream( new FileInputStream("c:/test.dat") ); ObjectOutputStream fTmp = new ObjectOutputStream( new FileOutputStream("c:/test.tmp") ); Personne p ; boolean eof = false; while( !eof ) { try { p = (Personne)fLu.readObject(); fTmp.writeObject(p); } catch(EOFException e) { eof = true; } } fLu.close() ; fTmp.writeObject(new Personne(33,"Claude",true,1.23)); fTmp.writeObject(new Personne(44,"Daniel",false,1.8)); fTmp.close() ; File file; file=new File("c:/test.dat"); file.delete(); file=new File("c:/test.tmp"); file.renameTo(new File("c:/test.dat")); }
Partager