TP 4 de Programmation 2e Année Informatique 2004-2005 : java

Exercice 1

On considère le programme FileFinder. Son travail est de trouver toutes les occurrences d'un fichier dont on passe le nom. Par exemple :
rosmord@amenemhat:~/public_html/Cours/TP/TPN04/src$ java FileFinder /home/rosmord/public_html index.html
/home/rosmord/public_html/ESSAIS/HTML/index.html
/home/rosmord/public_html/ESSAIS/index.html
/home/rosmord/public_html/index.html
/home/rosmord/public_html/sagakeeper/index.html
/home/rosmord/public_html/sagakeeper/admin/index.html
/home/rosmord/public_html/Cours/Projet/index.html
/home/rosmord/public_html/Cours/TP/TPN01/index.html
/home/rosmord/public_html/Cours/TP/TPN02/index.html
/home/rosmord/public_html/Cours/TP/TPN03/index.html
/home/rosmord/public_html/Cours/TP/TPN04/index.html
/home/rosmord/public_html/Cours/Tomcat/index.html
rosmord@amenemhat:~/public_html/Cours/TP/TPN04/src$ 
    

Question 1

Étudiez le code et complétez-le pour qu'il fonctionne.

Question 2

Quand un calcul est assez long, il arrive souvent que l'on veuille prévenir l'utilisateur de son avancement. On peut imaginer un code du genre :
      float nombreDEtapesEstimees= ....;
      int nombreEtapes= 0;
      while (! calculFini) {
      	... étape du calcul ...
       nombreEtapes++;
       System.out.println("complétion : " +nombreEtapes/ nombreDEtapesEstimees);
      }
    
Le problème de ce type de code est qu'il mélange l'interface utilisateur (ici la manière dont on prévient l'utilisateur) et le calcul.

Pour résoudre cela, on passe par une interface (au sens java du terme).

Définissez une interface appelée CompletionListener, et contenant la méthode :

      // Appelé quand on est arrivé à l'étape stageNumber sur total.
      // Les nombre peuvent être approximatifs.
      void completionStage(int stageNumber, int total);
    

On ajoutera un champ completionListener à la classe FileFinder. Pour calculer les diverses valeurs, on estimera le nombre total d'étape comme étant le nombre total de fichiers à examiner, et le numéro d'étape comme étant le nombre total de fichiers vus. Comme au départ, on ne connaît pas le nombre total de fichiers à examiner, on l'approximera par le nombre total de fichiers qu'on sait devoir examiner (au départ : 1 ; ensuite, quand on rentre dans un répertoire, on ajoute la taille du répertoire). On appellera la méthode completionStage() au moment opportun.

Le programme devra tourner même si on ne fixe pas de CompletionListener.

Si vous avez le temps, après le tp, cherchez une meilleure approximation.

Question 3

Écrire une classe implémentant CompletionListener, et affichant un message à chaque fois. Attachez un objet de cette classe à votre Programme.

Question 4

Ajouter le traitement de "*" dans le nom du fichier. On pourra considérer que "*" n'apparaît qu'au début ou qu'en fin de nom.

Question 5

Ajouter une option au programme qui permettra de ne chercher que les fichiers qui dépassent une certaine taille. par exemple :
      java FileFinder /home/rosmord/public_html index.html -larger 1000
    
Affichera les fichiers dont la taille dépasse 1000 octets. Réfléchissez bien à la manière de passer l'option en question au chercheur de fichiers.

Exercice 2

Question 1

Soient la classes Etudiant Un Etudiant a un nom, un prénom et une promotion. Écrivez cette classe. Soit le code :

      ArrayList l= new ArrayList();
      l.add(new Etudiant("Ada", "Lovelace", "Info1A"));
      l.add(new Etudiant("Alan", "Turing", "Info1A"));
      l.remove(new Etudiant("Ada", "Lovelace", "Info1A"));
      
      // affichez le contenu de l.
      // rappel : taille de l = size(); ième élément : get(i)
    
Qu'affiche-i-il ?

Question 2

dotez-la d'une méthode equals (et hashCode par la même occasion). Testez le même code. Que se passe-t-il ?
Serge ROSMORDUC