Module I5 – Java Corrigé TP4 RT I – Gestion de flux de caractères
Transcription
Module I5 – Java Corrigé TP4 RT I – Gestion de flux de caractères
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.