C. Recanati
InHM Java 
MI1, 2012

TP n° 1

1) Rappelons qu’on compile et qu’on exécute un fichier java avec 
%  javac  fichier.java  		  fichier.class
%  java  fichier [arg1 ... argN]

2) Pour vérifier que votre environnement Java est cohérent, tapez :
% which java
puis
% which javac
Vérifier ainsi que les deux commandes proviennent bien du même répertoire de binaires. [Si vous avez un problème pour trouver la commande which, c’est que votre variable PATH n’est pas correctement configurée]. 
Si vos commandes java ne sont pas cohérentes, il faut supprimer dans votre fichier de configuration .bashrc le caractère de début de ligne (commentaire) de la ligne qui vous garantira l’accès à une configuration java correcte.
Pour aller plus vite, vous pouvez aussi copier le fichier .bashrc d’un de vos camarades qui aurait une configuration correcte. Ensuite relire votre fichier de configuration du bash en tapant
% source ~/.bashrc 

Pour connaître la version utilisée, vous pouvez taper :
% java -version
Il est possible que certains d’entre vous n’accèdent qu’aux commandes de /usr/bin ou /usr/local/bin qui ne fournissent pas une version récente. 

3) Pour accéder à la documentation en local, partez du répertoire où se trouve installée votre commande ../bin/java, et lancez un navigateur sur le fichier suivant (attention, faire file au lieu de http) :
file : /usr/...repertoire java.../docs/api/index.html
Enregistrez ensuite un onglet sur cette page pour la mémoriser dans votre navigateur.

Exercice 1
Pour améliorer l’affichage de messages d’erreurs ou de tests, écrire une méthode getClassName (Object  o) qui retourne la chaîne du nom de la classe de l’objet, sans le chemin complet du package. Tester votre méthode avec des objets java disponibles dans les packages standards.

Indications 1. Récupérer le nom complet de la classe d’un objet avec getClass  et getName, puis, rechercher dans la chaîne obtenue l’index qui correspond à la dernière apparition du caractère point (cf. lastIndexOf).   En extraire avec substring la sous-chaîne recherchée (elle commence à l’index trouvé + 1).
2. Pour pouvoir invoquer votre méthode sur un objet, il faudra instancier votre classe principale dans le main. Essayer votre méthode avec par exemple System.out ou System.in qui sont des objets java.

Exercice 2 le but de cet exercice est de créer une application qui mémorise un ensemble de points tirés aléatoirement et les affiche selon différents modes (sous forme de petits ronds, de petites croix, ou comme un polygone). On terminera cet exercice dans un autre TP.

Un point sera une instance de la classe java.awt.Point. L’ensemble de points sera mémorisé dans la classe principale par un vecteur ensPts. Un champ mode (de type entier) de la classe principale indiquera le mode d’affichage des points. Il y aura trois modes d’affichage différents, définis par des constantes entières nommées : 
- ROND  : les points  seront dessinés sous forme de petits ovales 
- CROIX  : les points seront  dessinés sous forme de croix
- POLY  : le polygone joignant les points sera dessiné

1) Ecrire une interface définissant les constantes des modes d’affichage dans un fichier séparé. Se servir de cette interface dans l’application pour initialiser le champ mode d’une instance de l’application (à rond par exemple).
2) Ecrire une méthode initAleatoire ayant trois paramètres: nb, le nombre de points que l’on souhaite stocker, et la largeur et la hauteur du cadre qui englobe les points. initAleatoire crée nb Points dont les coordonnées (positives) se situent dans le  cadre indiqué, et les stocke dans le vecteur ensPts de la classe principale.

  Pour le tirage des coordonnées des points, on utilisera dans la classe Math la méthode random() qui retourne un double compris entre 0.0 et 1.0. ainsi que la méthode round(double a) qui retourne l’entier long le plus proche de a.

Exercice 3 le but de cet exercice est de tester et vérifier des objets de classe File.
1) Ecrire une classe Test qui crée un objet  File monRep  avec l’instruction
File monRep = new File ("…/repertoire java/src/java/io") ;
Puis teste et imprime s’il s’agit ou non d’un répertoire. On recommence l’opération ensuite avec un nom de répertoire utilisateur dans lequel on pourra écrire, puis on crée un nouvel objet de type File avec
	File monFichier = new File (monRep,"File.java") ;
On imprime  si ce fichier existe, si on peut le lire, et si on peut écrire dedans.
2) Modifier le code précédent pour que l’application lise le nom du répertoire et celui du fichier à vérifier en argument au programme.
3) Ecrire une classe permettant d’obtenir la liste de tous les fichiers d’un répertoire donné et de consigner la date de leur dernière modification.

Indications  Utiliser les méthodes getAbsolutePath, getName et getParent pour imprimer les informations sur le répertoire initial. Récupérer ensuite un tableau contents de File avec la méthode listFiles  et  imprimer les éléments de ce tableau en indiquant à chaque fois s’il s’agit ou non d’un répertoire, et en donnant la date de leur dernière modification (créer un objet Date à partir de contents[i].last-Modified() ).