Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Java

Java essayer avec des ressources

Essai Java avec ressources

Dans ce tutoriel, nous allons découvrir l'instruction try-with-resources pour fermer automatiquement les ressources.

Le try-with-resources L'instruction ferme automatiquement toutes les ressources à la fin de l'instruction. Une ressource est un objet à fermer à la fin du programme.

Sa syntaxe est :

try (resource declaration) {
  // use of the resource
} catch (ExceptionType e1) {
  // catch block
}

Comme le montre la syntaxe ci-dessus, nous déclarons le try-with-resources déclaration de,

  1. déclarer et instancier la ressource dans le try clause.
  2. spécifier et gérer toutes les exceptions susceptibles d'être levées lors de la fermeture de la ressource.

Remarque : L'instruction try-with-resources ferme toutes les ressources qui implémentent l'interface AutoCloseable.

Prenons un exemple qui implémente le try-with-resources déclaration.

Exemple 1 :essayer avec des ressources

import java.io.*;

class Main {
  public static void main(String[] args) {
    String line;
    try(BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
      while ((line = br.readLine()) != null) {
        System.out.println("Line =>"+line);
      }
    } catch (IOException e) {
      System.out.println("IOException in try block =>" + e.getMessage());
    }
  }
}

Sortie si le fichier test.txt est introuvable.

IOException in try-with-resources block =>test.txt (No such file or directory)

Sortie si le fichier test.txt est trouvé.

Entering try-with-resources block
Line =>test line

Dans cet exemple, nous utilisons une instance de BufferedReader pour lire les données du test.txt fichier.

Déclarer et instancier le BufferedReader à l'intérieur du try-with-resources garantit que son instance est fermée, que le try l'instruction se termine normalement ou lève une exception.

Si une exception se produit, elle peut être gérée à l'aide des blocs de gestion des exceptions ou du mot-clé throws.

Exceptions supprimées

Dans l'exemple ci-dessus, des exceptions peuvent être levées à partir du try-with-resources déclaration quand :

  • Le fichier test.txt est introuvable.
  • Fermer le BufferedReader objet.

Une exception peut également être levée depuis le try bloquer en tant que lecture de fichier peut échouer pour de nombreuses raisons à tout moment.

Si des exceptions sont levées à la fois par le try bloc et le try-with-resources instruction, exception de la try le bloc est levé et l'exception du try-with-resources l'instruction est supprimée.

Récupération des exceptions supprimées

Dans Java 7 et versions ultérieures, les exceptions supprimées peuvent être récupérées en appelant le Throwable.getSuppressed() méthode de l'exception levée par le try bloquer.

Cette méthode renvoie un tableau de toutes les exceptions supprimées. Nous obtenons les exceptions supprimées dans le catch bloquer.

catch(IOException e) {
  System.out.println("Thrown exception=>" + e.getMessage());
  Throwable[] suppressedExceptions = e.getSuppressed();
  for (int i=0; i<suppressedExceptions.length; i++) {
    System.out.println("Suppressed exception=>" + suppressedExceptions[i]);
  }
}

Avantages de l'utilisation de try-with-resources

Voici les avantages de l'utilisation de try-with-resources :

1. bloc finally non requis pour fermer la ressource

Avant que Java 7 n'introduise cette fonctionnalité, nous devions utiliser le finally bloquer pour s'assurer que la ressource est fermée pour éviter les fuites de ressources.

Voici un programme similaire à Exemple 1 . Cependant, dans ce programme, nous avons utilisé le bloc finally pour fermer les ressources.

Exemple 2 :Fermer la ressource à l'aide du bloc finally

import java.io.*;

class Main {
  public static void main(String[] args) {
    BufferedReader br = null;
    String line;

    try {
      System.out.println("Entering try block");
      br = new BufferedReader(new FileReader("test.txt"));
      while ((line = br.readLine()) != null) {
        System.out.println("Line =>"+line);
      }
    } catch (IOException e) {
      System.out.println("IOException in try block =>" + e.getMessage());
    } finally {
      System.out.println("Entering finally block");
      try {
        if (br != null) {
          br.close();
        }
      } catch (IOException e) {
        System.out.println("IOException in finally block =>"+e.getMessage());
      }

    }
  }
}

Sortie

Entering try block
Line =>line from test.txt file
Entering finally block 

Comme nous pouvons le voir dans l'exemple ci-dessus, l'utilisation de finally block pour nettoyer les ressources rend le code plus complexe.

Remarquez le try...catch bloc dans le finally bloquer aussi ? C'est parce qu'un IOException peut également se produire lors de la fermeture du BufferedReader instance à l'intérieur de ce finally bloquer afin qu'il soit également intercepté et traité.

Le try-with-resources l'instruction effectue la gestion automatique des ressources . Nous n'avons pas besoin de fermer explicitement les ressources car JVM les ferme automatiquement. Cela rend le code plus lisible et plus facile à écrire.

2. try-with-resources avec plusieurs ressources

On peut déclarer plus d'une ressource dans le try-with-resources déclaration en les séparant par un point-virgule ;

Exemple 3 :essayez avec plusieurs ressources

import java.io.*;
import java.util.*;
class Main {
  public static void main(String[] args) throws IOException{
    try (Scanner scanner = new Scanner(new File("testRead.txt")); 
      PrintWriter writer = new PrintWriter(new File("testWrite.txt"))) {
      while (scanner.hasNext()) {
        writer.print(scanner.nextLine());
      }
    }
  }
}

Si ce programme s'exécute sans générer d'exceptions, Scanner l'objet lit une ligne du testRead.txt fichier et l'écrit dans un nouveau testWrite.txt fichier.

Lorsque plusieurs déclarations sont faites, le try-with-resources L'instruction ferme ces ressources dans l'ordre inverse. Dans cet exemple, le PrintWriter l'objet est fermé en premier, puis le Scanner l'objet est fermé.

Amélioration de l'essai avec les ressources de Java 9

En Java 7, il y a une restriction au try-with-resources déclaration. La ressource doit être déclarée localement dans son bloc.

try (Scanner scanner = new Scanner(new File("testRead.txt"))) {
  // code
}

Si nous avions déclaré la ressource en dehors du bloc dans Java 7, cela aurait généré un message d'erreur.

Scanner scanner = new Scanner(new File("testRead.txt"));
try (scanner) {
  // code
}

Pour traiter cette erreur, Java 9 a amélioré le try-with-resources afin que la référence de la ressource puisse être utilisée même si elle n'est pas déclarée localement. Le code ci-dessus va maintenant s'exécuter sans aucune erreur de compilation.


Java

  1. Opérateurs Java
  2. Commentaires Java
  3. Java pour chaque boucle
  4. Chaînes Java
  5. InterfaceJava
  6. Classe anonyme Java
  7. Annotations Java
  8. Assertions Java
  9. Java vecteur