13 30 Singleton 2

Nous reprenons le travail sur le Singleton TodoData. Dans la méthode loadTodoItems(), nous déclarons une variable String input puis enveloppons la lecture dans un bloc try/finally. Dans le bloc finally, on s'assure que le BufferedReader est valide avant de le fermer : if (br != null) br.close(). À l'intérieur du try, la boucle de lecture s'écrit naturellement : while ((input = br.readLine()) != null).

Parser et écrire les éléments

Pour chaque ligne, nous utilisons un tableau de chaînes obtenu par split sur le caractère de tabulation. Nous récupérons ainsi trois informations : la description à l'index 0, les détails à l'index 1 et la chaîne de date à l'index 2. La date est reconvertie via LocalDate.parse en utilisant le formateur défini dans le constructeur. Avec ces trois éléments, on construit un TodoItem que l'on ajoute à la liste : todoItems.add(todoItem).

Ensuite, nous créons la méthode storeTodoItems(), qui lève également une IOException. Elle commence par Path path = Paths.get(filename). Cette fois, nous utilisons un BufferedWriter et un bloc try/finally avec le test de nullité avant bw.close(). Dans le try, nous créons un itérateur sur la liste pour parcourir les TodoItems un par un avec while (iter.hasNext()).

Pour chaque élément, nous appelons bw.write(String.format("%s\t%s\t%s", item.getDescription(), item.getDetails(), item.getDeadline().format(formatter))), en utilisant le formateur pour transformer la date dans un format lisible. Enfin, bw.newLine() ajoute un saut de ligne dans le fichier texte. La vidéo s'arrête ici ; la suite consistera à override la méthode stop dans la classe Main et à utiliser ce code pour persister les données.