:: Enseignements :: Licence :: L3 :: 2012-2013 :: Programmation Objet avec Java ::
[LOGO]

Liste, itérateur, Path et Files.



Exercice 1 - Very bad code

Le code ci-dessus a été écrit sur le toit d'un immeuble de Las Vegas, bien sûr, il ne marche pas.
     public class VeryBadCode {
       private static ArrayList<String> findOptions(ArrayList<String> argumentList) {
         ArrayList<String> optionList = new ArrayList<>();
         for(String arg: argumentList) {
           if (!arg.startsWith("-")) {
             continue;
           }
           optionList.add(arg);
           argumentList.remove(arg);   // here, lies a dragon
         }
         return optionList;
       }
  
       public static void main(String[] args) {
         ArrayList<String> argumentList = new ArrayList<>();
         Collections.addAll(argumentList, args);
         ArrayList<String> optionList = findOptions(argumentList);
       }
     }  
   
  1. Indiquer quelles sont les arguments que l'on doit passer au programme pour qu'il plante ?
    Expliquer le problème.
  2. Comment corriger le problème ?
    Modifier le code.
    Note: il doit faire ce qui était prévu. Supprimer tout le code supprime aussi le problème mais ne le résoud pas !
  3. Expliquer pourquoi la méthode findOptions ne devrait pas retourner une ArrayList ni même une List ?
    Que devrait elle retourner à la place ?
  4. Expliquer pourquoi la méthode findOptions ne doit pas retourner une collection de String ? Quelle est le problème avec les String ?
    Que devrait elle retourner à la place ?

Exercice 2 - Répertoire et répertoires

Où notre vaillant héro apprend comment lister les fichiers d'un répertoire.

  1. Que représente la classe java.nio.file.Path et à quoi sert la classe java.nio.file.Files ?
  2. Comment fait-on pour créer un Path à partir d'une String ?
  3. Ecrire le code qui permet d'afficher les fichiers du répertoire courant.
    Il existe une méthode Files.newDirectoryStream et l'interface DirectoryStream hétite de Iterable.
  4. A quoi sert la méthode close de DirectoryStream?
    Modifier votre code en conséquence.
  5. A quoi sert la syntaxe du langage Java try/finally ?
    Modifier votre code en conséquence.
  6. A quoi sert la syntaxe du langage Java try-with-resources ?
    Modifier votre code en conséquence.

Exercice 3 - Service de voyeur (traduction peu officiel)

On souhaite savoir si les fichiers d'un repertoire sont créés, modifiés ou détruit. Pour cela, nous allons utiliser l'interface java.nio.file.WatchService.

  1. Comment créer un WatchService (RTFM) et comment enregistrer un répertoire dans un WatchService (RTFM again) ?
  2. Qu'est ce qu'une WatchKey et à quoi servent les méthodes pollEvents et reset ?
    Quelles sont les types standards de WachEvent que l'on peut rencontrer ?
  3. Ecrire un code qui surveille le répertoire courant et affiche les évènements envoyés par le WatchService ainsi que les fichiers liés à ces évènements.
  4. A quoi correspond le type d'évènement OVERFLOW ?
    Que peut-on faire dans ce cas ?

Exercice 4 - Parcours récursif [à la maison]

Il existe dans la classe java.nio.file.Files une méthode walkFileTree qui permet de parcourir récursivement des répertoires.

  1. Ecrire un programme qui affiche tous les fichiers et répertoires du répertoire courant récursivement en utilisant la méthode walkFileTree.
  2. A quoi sert la classe BasicFileAttributes ?
    Modifier votre programme pour afficher la taille des fichiers ainsi que leur dernière date de modification.
    Note: le nombre de milliseconde depuis epoch n'étant pas super lisible pour un utilisateur, il existe en Java la classe java.util.Date.