C. Recanati
InHM Java 
Master 1, 2008

TPn°1

1. Pour vérifier que votre environnement est cohérent, tapez :
% which java
puis
% which javac
Vérifier ainsi que la commande java qui est exécutée coïncide bien avec celle du compilateur java (commande javac). [Si vous avez des problèmes à trouver la commande which, c’est que votre variable PATH n’est pas correctement configurée.]. 
Pour connaître la version utilisée, tapez :
% 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 nécessairement une version récente.
Pour utiliser les versions supérieures (et eclipse), il faut modifier votre fichier de configuration .bashrc (pour le PATH et sur la variable JAVA_HOME). Rem : pour utiliser la version 1.6 en 2007, il fallait modifier 
	JAVA_HOME =/usr/java/jdk      (ou jdk1.6.0_02)
et ajouter ensuite
 	export PATH=$JAVA_HOME/bin:$PATH
	export MANPATH=$MANPATH:$JAVA_HOME/man
Pour aller plus vite, vous pouvez aussi simplement récupérer le fichier .bashrc d’un de vos camarades qui aurait une bonne configuration.

2. Pour accéder à la documentation en local, partez du répertoire où se trouve installé votre java, et lancez un navigateur sur le fichier suivant (avec file au lieu de http) :
file : /usr/... .../docs/api/index.html

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

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 cette méthode avec des objets java disponibles dans les packages standards. 
  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 ‘.’ (cf. lastIndexOf).   En extraire alors 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.

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 s’en servira ensuite 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 cette classe principale indiquera le mode d’affichage des points. Il y aura trois modes d’affichage différents, définis par des constantes 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 pour le mode 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 prenant trois paramètres: nb, le nombre de points que l’on souhaite stocker, et la largeur et la hauteur du cadre qui englobera 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 aléatoire des points, on trouvera dans la classe Math la méthode random() qui retourne un double compris entre 0.0 et 1.0. et 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 («…/jdk1.3/src/java/io») ;
Puis teste et imprime s’il s’agit ou non d’un répertoire.
 Ensuite  cette classe crée un nouvel objet de type File avec
	File monFichier = new File (monRep,«File.java») ;
Elle 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.
  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() ).