Module I5 – Java Corrigé TP4 RT I – Gestion de flux de caractères

publicité
Module I5 – Java
Corrigé TP4
RT
I – Gestion de flux de caractères
1.1 – Création de l'application de base
Cette application permet d'effectuer la lecture du clavier, et d'afficher à l'écran le texte lu. Elle
s'arrête lorsqu'une ligne vide est saisie.
1.2 – Création d'un fichier
import java.io.*;
public class TestFlux {
public static void main(String[] args) throws IOException {
BufferedReader clavier = new BufferedReader(
new InputStreamReader(System.in));
String s;
boolean fin=false;
try {
BufferedWriter fichier = new BufferedWriter(
new FileWriter("texte.tp"));
while (!fin) {
s=clavier.readLine();
System.out.println(s);
fichier.write(s,0,s.length());1
if (s.length()==0)
fin =true;
}
fichier.close();
}
catch(IOException e) {
System.out.println("Erreur fichier : " + e.toString() );
}
}
}
Remarques :
– Toutes les instructions liées au flux de fichier doivent être inclues dans le bloc try
– Ce code permet de générer un fichier contenant le texte saisi au clavier. Toutefois, aucun saut de ligne
n'est inclus (la méthode readLine renvoie uniquement le texte saisi, sans saut de ligne)
– Pour générer un saut de ligne, utiliser la méthode : fichier.newLine();
inclure dans le code, apès fichier.write(...
– A chaque exécution, le fichier existant est écrasé
– Si la commande fichier.close() n'est pas insérée dans le code, le fichier créé sera vide
IUT Elbeuf
1/3
S.H.
Module I5 – Java
Corrigé TP4
RT
1.3 – Lecture du fichier
import java.io.*;
public class TestFlux {
public static void main(String[] args) throws IOException {
String s;
boolean fin=false;
try {
BufferedReader fichier = new BufferedReader(
new FileReader("texte.tp"));
while (!fin) {
s=Fichier.readLine();
System.out.println(s);
if (s.length()==0)
fin =true;
}
fichier.close();
}
catch(IOException e) {
System.out.println("Erreur fichier : " + e.toString() );
}
}
}
II – Fichier de données
2.1 – Enregistrement de données
Ecriture d'un int : writeInt
Ecriture d'un float : writeFloat
...
Avec ce principe, java gère automatiquement les formats de variables pour la sauvegarde.
L'ouverture du fichier avec notepad motre un contenu inexploitable; il ne s'agit pas d'un fichier texte.
2.2 – Lecture de données
Ce principe fonctionne parfaitemant, à condition de respecter les formats des variables, et l'ordre de
lecture qui doit être identique à l'ordre d'écriture.
Pour déterminer l'espace mémoire occupé, il suffit d'observer l'évolution de la dimension du fichier
créé, lorsque l'on sauvegarde une nouvelle donnée.
III – Etude avancée des flux
3,1 – Accès simultanné au même fichier
Pour obtenir une écriture et lecture simultannée sur le mêm fichier, il faut déclarer 2 flux séparés,
l'un pour la lecture, l'autre pour l'écriture. La gestion de ces flux reste indépendante, néanmoins les nouvelles
données ne sont disponibles que lorsqu'elles ont réellement été écrites dans le fichier (après close, ou flush).
Le résultat obtenu dépendra bien évidemment de l'ordre des opérations, mais aucune obligation n'est
IUT Elbeuf
2/3
S.H.
Module I5 – Java
Corrigé TP4
RT
imposée par Java.
Si le fichier n'existe pas, une erreur est générée par Java.
Ne pas oublier pour le flux d'écriture, le paramètre "true" pour ne pas écraser le contenu (voir listing)
Remarque : Java s'avère très pratique concernant la gestion de fichiers, toutefois, s'il est nécessaire de
réaliser une opération spécifique au matériel, il ne s'agit pas du langage le mieux adapté (voir C++, par
exemple)
import java.io.*;
class Fichier {
public static void main (String [] arg) throws IOException {
try {
//** Flux de lecture du fichier
BufferedReader FicIn=new BufferedReader(
new FileReader("test.tp"));
//** Flux d'écriture dans fichier (en fin de fichier)
BufferedWriter FicOut=new BufferedWriter(
new FileWriter("test.tp",true));
// Flux de lecture du clavier
BufferedReader Clavier=new BufferedReader(
new InputStreamReader(System.in));
String s;
boolean fin=false;
System.out.println("Entrez le texte à inclure en fin de fichier :");
System.out.println("-------------------------------------------");
fin=false;
while (!fin) {
// Boucle
s=Clavier.readLine();
//
Lit le clavier
if (s.length()==0) fin=true;
//
Test de fin
else {
FicOut.write(s);
//
Ecriture dans fichier
FicOut.newLine();
//
Saut de ligne
}
}
FicOut.close();
// Fermeture flux --> Ecriture
System.out.println("Listing du fichier :");
System.out.println("------------------");
fin=false;
while (!fin) {
// Boucle
s=FicIn.readLine();
//
Lit le fichier
if (s==null) fin=true;
//
Test de fin de fichier
else
System.out.println(s); //
Affichage contenu
}
FicIn.close();
// Fermeture flux
}
}
catch (IOException e) {
// Gestion des erreurs
System.out.println("Erreur :"+e.toString());
}
finally {
// Action toujours réalisée
System.out.println("Fin de l'application");
}
}
IUT Elbeuf
3/3
S.H.
Téléchargement