Leçons du module (2/2)
Try-with-resources
Dans les anciennes versions de Java, la gestion des ressources nécessitant une fermeture explicite (comme les fichiers, les connexions à des bases de données ou les flux réseau) imposait l'utilisation d'un bloc finally pour garantir leur fermeture. Cela conduisait à un code verbeux et sujet aux fuites de mémoire.
À partir de Java 7, l'instruction try-with-resources a été introduite, garantissant la fermeture automatique de toutes les ressources déclarées à l'intérieur du bloc try, à condition qu'elles implémentent l'interface AutoCloseable.
La Syntaxe
Les ressources sont déclarées et initialisées entre parenthèses juste après le mot-clé try.
try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
String line = br.readLine();
System.out.println(line);
} catch (IOException e) {
System.out.println("Errore di I/O: " + e.getMessage());
}
// br viene chiuso automaticamente qui, anche se si verifica un'eccezione
Déclarer des Ressources Multiples
Il est possible d'instancier plusieurs ressources au sein du même bloc try, en les séparant par un point-virgule ;. Les ressources seront fermées dans l'ordre inverse de leur déclaration.
try (
FileReader fr = new FileReader("input.txt");
FileWriter fw = new FileWriter("output.txt")
) {
// Utilizzo delle risorse
} catch (IOException e) {
System.out.println("Errore: " + e.getMessage());
}
Créer des Ressources Personnalisées
Une ressource personnalisée peut être utilisée dans un try-with-resources à condition qu'elle implémente java.lang.AutoCloseable et surcharge la méthode close().
public class DatabaseConnection implements AutoCloseable {
public void query(String sql) {
System.out.println("Eseguo query: " + sql);
}
@Override
public void close() {
System.out.println("Connessione chiusa!");
}
}
À toi de jouer
Complétez la méthode readFile en utilisant la structure try-with-resources pour initialiser un BufferedReader qui enveloppe un FileReader sur path. Dans le bloc catch, capturez IOException et affichez 'Error reading file'.
Afficher l'indice
Déclarez le `BufferedReader` entre parenthèses juste après `try`, et interceptez `IOException`.
Solution disponible après 3 tentatives
Instanciez la ressource personnalisée CustomResource au sein d'un bloc try-with-resources, appelez la méthode doWork() sur celle-ci et gérez l'exception Exception en affichant 'Error'.
Afficher l'indice
Utilisez `try (CustomResource res = new CustomResource())` et appelez `res.doWork();` à l'intérieur.
Solution disponible après 3 tentatives
Déclarez simultanément FirstResource et SecondResource dans la même structure try-with-resources. Gérez Exception en affichant 'Error'.
Afficher l'indice
Séparez la déclaration des deux ressources à l'intérieur des parenthèses de `try` par un point-virgule `;`.
Solution disponible après 3 tentatives