Passer au contenu principal
eLearner.app
Module 5 · Leçon 2 sur 210/14 dans le cours~12 min
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.

Code
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.

Code
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().

Code
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

Exercice#java.m5.l2.e1
Tentatives : 0Chargement…

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'.

Chargement de l'éditeur…
Afficher l'indice

Déclarez le `BufferedReader` entre parenthèses juste après `try`, et interceptez `IOException`.

Solution disponible après 3 tentatives

Exercice#java.m5.l2.e2
Tentatives : 0Chargement…

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'.

Chargement de l'éditeur…
Afficher l'indice

Utilisez `try (CustomResource res = new CustomResource())` et appelez `res.doWork();` à l'intérieur.

Solution disponible après 3 tentatives

Exercice#java.m5.l2.e3
Tentatives : 0Chargement…

Déclarez simultanément FirstResource et SecondResource dans la même structure try-with-resources. Gérez Exception en affichant 'Error'.

Chargement de l'éditeur…
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