Classe utilitaire en Java
La classe présentée ci-dessous a été écrite, d'une part pour économiser
la frappe de caractères au clavier, et d'autre part pour faciliter
l'apprentissage de Java, en particulier en fournissant des méthodes
simples pour effectuer des saisies au clavier.
Des références en lignes sont en fin de ce document.
Pour saisir ...
Un exemple pour saisir un entier au clavier:
int age=U.int_("votre age ?");
Qui peut aussi être programmé:
a("votre age ?");int age=U.int_();
en séparant l'affichage de l'invite et la saisie.
Autre exemple pour saisir une valeur décimale dans une variable
x de type float, il suffit d'utiliser la méthode
float_ de la classe U, et donc d'écrire:
U.a("Un décimal : "); x = U.float_();
(ne pas oublier le caractère '_' après 'float', car
'float' tout seul est un mot clé de Java, et ne peut donc pas être un
nom de méthode)
La méthode float_(String intitulé) affiche un intitulé avant
de saisir une valeur décimale.
Il existe les méthodes
et string_() et string_(String intitulé)
pour lire au clavier une chaîne de caractères.
Pour avoir moins à taper ...
Un exemple: pour éviter d'avoir trop de
caractères à taper au clavier, on remplace:
System.out.print("Un texte "+ v);
par:
U.a("Un texte "+ v);
De même l'appel:
System.out.println("Un texte "+ v);
peut être remplacé par:
U.a_("Un texte "+ v);
Bien repérer le caractère '_' qui est ajouté pour avoir un affichage
avec retour à la ligne' .
Enfin pour afficher un message lié à une exception, on peut utiliser:
U.a(String message, Exception e);
Voir un exemple d'utilisation dans la programmation de la
méthode 'float float_()', ci-dessous.
Le texte de la classe.
Le texte ci-dessous peut être recopié à la souris et placé dans le fichier de
nom: U.java.
Les commentaires qui accompagnent le code respectent les conventions 'javadoc'.
/** Classe utilitaire, évitant des frappes au clavier.
- Faciliter les lectures de valeurs numériques au clavier avec les
méthodes int_, float_ et string_
- Remplacer: System.out.print par U.a
- Remplacer System.out.println par U.a_
- Afficher une exception avec U.a(String message, Exception e)
- Fournir la date du jour par U.date()
Prototypes des méthodes
=======================
Trois méthodes de saisie, après affichage d'une invite
public static float float_(String intitulé)
public static int int_(String intitulé) {
public static String string_(String intitulé) {
Trois méthodes de saisie, sans invite
public static float float_()
public static int int_()
public static String string_()
Pour raccourcir la frappe
static void a( String txt): affichage
static void a_( String txt): affichage et retour à la ligne
static void a( String txt, Exception e) affichage d'une exception
La date du jour
static String date()
*/
import java.io.*;
import java.util.GregorianCalendar; // cf date()
class U {
/** Flot tamponné associé à l'entrée standard. */
private static BufferedReader clavier =
new BufferedReader( new InputStreamReader(System.in));
// LECTURE D'UN DECIMAL (float)
/** Affiche l'intitulé et lit une valeur numérique décimale
(lecture bloquante).
@param intitulé : message affiché, avant la saisie
@return le décimal(float) lu ou Float.NEGATIVE_INFINITY si les
caractères lus ne sont pas convertibles en un 'float'.
*/
public static float float_(String intitulé) {
U.a( intitulé );
return float_();
}
/** Lit une valeur numérique décimale (lecture bloquante).
@return le décimal(float) lu ou Float.NEGATIVE_INFINITY
si les caractères lus ne sont pas convertibles en
'float'.
*/
public static float float_() {
float dd=Float.NEGATIVE_INFINITY;
try {
String ch = clavier.readLine().trim();
while( ch.length()==0 ) ch = clavier.readLine().trim();
dd=Float.parseFloat(ch);
}
catch (NumberFormatException e) {U.a("float_(): (décimal attendu)",e); }
catch (IOException e) {U.a("float_() (erreur E/S)",e);}
return dd;
}
// LECTURE D'UN ENTIER (int)
/** Affiche un intitulé et lit une valeur numérique entière
(lecture bloquante).
@param intitulé : message affiché, avant la saisie
@return l'entier lu ou Integer.MIN_VALUE si les
caractères lus ne sont pas convertibles en un 'int'.
*/
public static int int_(String intitulé) { U.a( intitulé ); return int_(); }
/** Lit une valeur numérique entière (lecture bloquante).
@return l'entier lu ou Integer.MIN_VALUE si les
caractères lus ne sont pas convertibles en un 'int'.
*/
public static int int_() {
int ii=Integer.MIN_VALUE;
try {
String ch = clavier.readLine().trim(); // espaces enlevés
while( ch.length()==0 )
ch = clavier.readLine().trim();
// Une possibilité: ii=(new Integer(ch)).intValue();
ii = Integer.parseInt(ch);
}
catch (NumberFormatException e) {
U.a("FluxCaractère.int_(): (entier attendue!)",e);
}
catch (IOException e) {
U.a("FluxCaractère.int_() (erreur E/S)",e);
}
return ii;
}
// LECTURE D'UNE CHAINE (String)
/** Affiche le texte 'intitulé' et lit une ligne au clavier.
@return suite de caractères lus (sans R/C ni saut de ligne)
*/
public static String string_(String intitulé) {
U.a( intitulé );
return string_();
}
/** Lit une ligne au clavier.
@return suite de caractères lus (sans R/C ni saut de ligne)
*/
public static String string_() {
String ch=null;
try { ch = clavier.readLine(); }
catch(IOException e) { U.a("U.string_() ", e); }
return ch;
}
// POUR ABREGER LA FRAPPE
/** Afficher le texte txt.
* Méthode pour abréger la frappe au clavier, car U.a( est
* plus court à écrire que System.out.print(
* @param txt : texte à afficher
*/
static void a( Object txt) {System.out.print(txt);}
/** * Afficher le texte txt, et passer à la ligne
* @param txt : texte à afficher
*/
static void a_( Object txt) {System.out.println(txt);}
/** Affiche le texte txt, puis le message lié à l'exception.
* La pile d'appels n'est pas affichée.
* @param txt : texte à afficher
* @param e : exception
*/
static void a( String txt, Exception e) {
a_("\n"+txt);
if( e != null) {
// a_(" --> "+e.getLocalizedMessage());
a_(" --> " + e.toString());
// e.printStackTrace(); // trace des appels
}
}
// DATE DU JOUR
/**
* Date au format: 23 décembre 2003, 5:00:16
* @return date sous forme chaîne
*/
public static String date() {
final String mois[]={"janvier","février","mars","avril","mai","juin"
,"juillet","août","septembre","octbre","novembre","décembre"};
GregorianCalendar cal = new GregorianCalendar();
String hms=""+cal.get(GregorianCalendar.HOUR);
int m=cal.get(GregorianCalendar.MINUTE),
s=cal.get(GregorianCalendar.SECOND);
hms=hms+":";
if( m<10) hms=hms+"0";
hms=hms+m+":";
if( s<10) hms=hms+"0";
hms=hms+s;
return "" + cal.get(GregorianCalendar.DAY_OF_MONTH)+' '
+ mois[cal.get(GregorianCalendar.MONTH)]+' '
+ cal.get(GregorianCalendar.YEAR)+", "+hms;
}
/** Arrêt de l'exécution, qui reprend en tapant R/C */
static void arrêt() {
byte aux[]=new byte[80];
try { a("\nSuite >>> "); System.in.read(aux,0,80);}
catch (Exception e) {}
}
} // fin class U
Et en plus ...
Des propriétés mises à disposition (cf. la documentation sur
System.getProperties()), obtenues sous forme chaîne de caractères:
-
Répertoire courant :
System.getProperty("user.dir")
-
Répertoire d'accueil :
System.getProperty("user.home"
-
Répertoires de classes :
System.getProperty("java.class.path")
-
Séparateur répertoire-fichier (/ pour unix) :
System.getProperty("file.separator"
-
Fin de ligne (\n pour unix) :
System.getProperty("line.separator")
-
Séparateur dans un chemin (: pour unix) :
System.getProperty("path.separator")
-
Système d'exploitation (Unix, Windows ...) :
System.getProperty("os.name")
-
Version :
System.getProperty("os.version")
Références