//Lecture de chaîne, entier, flottant en Java /** LireCDF.java lectures (FlotEntree ou fichier) Deux classes: FlotEntree pour lire des chaînes, des entiers ou des 'double' méthodes _string, _int et _double LireCDF, contient la méthode 'main' et utilise la précédente. Dans le 'main' un 'FlotEntree' est associé au clavier, ce qui permet de saisir une chainede caractères, un 'double' et un entier.classe permettant les lectures de valeur de type String, Puis un autre objet 'FlotEntree' est associé à un fichier texte, qui est lu ligne par ligne. Classes utilisées, flots associés, et suite d'objets servant à construire l'objet suivant: | flot d'octets flots de caractères flot tamponné ------+---------------------------------------------------------- | InputStream -> InputStreamReader -> BufferReader | FileInputStream -> InputStreamReader -> BufferReader | FileReader -> InputStreamReader -> BufferReader */ import java.io.*; // pour BufferedReader import java.lang.*; public class LireCDF { // Entrée clavier ou fichier public static FlotEntree clavier = new FlotEntree(System.in); //Méthode principale public static void main(String[] args) { String txt; double dd; int ii; // Lecture d'une chaine avec FlotEntree txt = clavier._string("(FlotEntree) Une chaine: "); System.out.println("Chaine lue de longueur " + txt.length()); // Lecture d'un double avec FlotEntree System.out.print("(FlotEntree) Un double: "); dd = clavier._double(); System.out.println("lu : "+ dd); ii = clavier._int("Un entier : "); System.out.println("lu : "+ ii); // Lecture par lignes d'un fichier texte try { // FileInputStream f = new FileInputStream("LireCDF.java"); String nomFic= System.getProperty("user.dir") +File.separator+"LireCDF.java"; System.out.println(nomFic); FileReader f = new FileReader(nomFic); FlotEntree ec = new FlotEntree(f); String lig; int num=0; System.out.println("\nLecture dans " + f.toString()); lig = ec._string(); while (ec.ready()){ num++; System.out.println("" + num + " : " + lig); lig = ec._string(); } f.close(); System.out.println("" + num + " lignes"); } catch (IOException e) { System.out.println("LireCDF.main() "+e); } } } // fin class LireCDF class FlotEntree extends BufferedReader { public FlotEntree( InputStream is) { super( new InputStreamReader(is) ); // pour connaître le codage des caractères: // InputStreamReader isr = new InputStreamReader(is); // System.out.println("(FlotEntree(): codage " + isr.getEncoding()); } public FlotEntree( Reader is) { super( is ); // pour connaître le codage des caractères: // InputStreamReader isr = new InputStreamReader(is); // System.out.println("(FlotEntree(): codage " + isr.getEncoding()); } /** Affiche l'intitulé intit et lit une valeur numérique décimale (cette lecture est bloquante). Renvoie le double lu ou Double.NEGATIVE_INFINITY si les caractères lus ne sont pas convertibles en un 'double'. */ public double _double(String intit) { System.out.print( intit ); return this._double(); } /** Lit une valeur numérique décimale (cette lecture est bloquante). Renvoie le double lu ou Double.NEGATIVE_INFINITY si les caractères lus ne sont pas convertibles en un 'double'. */ public double _double() { double dd; try { String ch = this.readLine(); while( ch.length()==0 )ch = this.readLine(); Double dD = new Double(ch); dd = dD.doubleValue(); } catch (NumberFormatException e) { System.out.println("FlotEntree._double()\n'" + e.getLocalizedMessage() + "' --> n'est pas une valeur numérique !!!"); dd = Double.NEGATIVE_INFINITY; } catch (IOException e) { System.out.println( "FlotEntree._double()n'" + e.getLocalizedMessage() + "' --> " + e.toString()); dd = Double.NEGATIVE_INFINITY; } return dd; } /** Affiche l'intitulé intit et lit une ligne. */ public String _string(String intit) { System.out.print( intit ); return this._string(); } public String _string() { String ch=null; try { ch = this.readLine(); } catch (IOException e) { System.out.println("FlotEntree._string() "+e.getLocalizedMessage()); System.out.println( " --> " + e.toString()); ch = null; } return ch; } /** Affiche l'intitulé intit et lit une valeur numérique entière (cette lecture est bloquante). Renvoie l'entier lu ou Integer.MIN_VALUE si les caractères lus ne sont pas convertibles en un 'int'. */ public int _int(String intit) { System.out.print( intit ); return this._int(); } /** Lit une valeur numérique entière (cette lecture est bloquante). Renvoie l'entier lu ou Integer.MIN_VALUE si les caractères lus ne sont pas convertibles en un 'double'. */ public int _int() { int ii; try { String ch = this.readLine(); while( ch.length()==0 )ch = this.readLine(); ii = (new Integer(ch)).intValue(); } catch (NumberFormatException e) { System.out.println("FlotEntree._int()\n'" + e.getLocalizedMessage() + "' --> n'est pas une valeur numérique !!!"); ii = Integer.MIN_VALUE; } catch (IOException e) { System.out.println( "FlotEntree._double()n'" + e.getLocalizedMessage() + "'--> " + e.toString()); ii = Integer.MIN_VALUE; } return ii; } }//fin class FlotEntree //fin LireCDF.java