Función Try-with-resources en Java

En Java, la declaración Try-with-resources es una declaración de prueba que declara uno o más recursos en ella. Un recurso es un objeto que debe cerrarse una vez que su programa termine de usarlo. Por ejemplo, un recurso de archivo o un recurso de conexión de socket. La instrucción try-with-resources garantiza que cada recurso se cierre al final de la ejecución de la instrucción. Si no cerramos los recursos, puede constituir una fuga de recursos y también el programa podría agotar los recursos disponibles para él.

Puede pasar cualquier objeto como recurso que implemente java.lang.AutoCloseable , que incluye todos los objetos que implementan java.io.Closeable.

Por esto, ahora no necesitamos agregar un bloque finalmente adicional solo para pasar las declaraciones de cierre de los recursos. Los recursos se cerrarán tan pronto como se ejecute el bloque try-catch. 

Sintaxis: Try-with-resources

try(declare resources here) {
    // use resources
}
catch(FileNotFoundException e) {
    // exception handling
}

Excepciones:

Cuando se trata de excepciones, hay una diferencia entre el bloque try-catch-finally y el bloque try-with-resources. Si se lanza una excepción tanto en el bloque try como en el bloque finalmente, el método devuelve la excepción lanzada en el bloque finalmente.

Para probar con recursos, si se lanza una excepción en un bloque de prueba y en una declaración de prueba con recursos, entonces el método devuelve la excepción lanzada en el bloque de prueba. Las excepciones lanzadas por try-with-resources se suprimen, es decir, podemos decir que el bloque try-with-resources lanza excepciones suprimidas.

Ahora, analicemos los dos escenarios posibles que se muestran a continuación como un ejemplo de la siguiente manera:

  • Caso 1 : Recurso único
  • Caso 2: Múltiples recursos

Ejemplo 1: probar con recursos con un único recurso

Java

// Java Program for try-with-resources
// having single resource
 
// Importing all input output classes
import java.io.*;
 
// Class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Try block to check for exceptions
        try (
 
            // Creating an object of FileOutputStream
            // to write stream or raw data
 
            // Adding resource
            FileOutputStream fos
            = new FileOutputStream("gfgtextfile.txt")) {
 
            // Custom string input
            String text
                = "Hello World. This is my java program";
 
            // Converting string to bytes
            byte arr[] = text.getBytes();
 
            // Text written in the file
            fos.write(arr);
        }
 
        // Catch block to handle exceptions
        catch (Exception e) {
 
            // Display message for the occurred exception
            System.out.println(e);
        }
 
        // Display message for successful execution of
        // program
        System.out.println(
            "Resource are closed and message has been written into the gfgtextfile.txt");
    }
}

 Producción: 

Resource are closed and message has been written into the gfgtextfile.txt

Ejemplo 2: prueba con recursos que tiene múltiples recursos

Java

// Java program for try-with-resources
// having multiple resources
 
// Importing all input output classes
import java.io.*;
 
// Class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
        // Try block to check for exceptions
 
        // Writing data to a file using FileOutputStream
        // by passing input file as a parameter
        try (FileOutputStream fos
             = new FileOutputStream("outputfile.txt");
 
             // Adding resouce
 
             // Reading the stream of character from
             BufferedReader br = new BufferedReader(
                 new FileReader("gfgtextfile.txt"))) {
 
            // Declaring a string holding the
            // stream content of the file
            String text;
 
            // Condition check using readLine() method
            // which holds true till there is content
            // in the input file
            while ((text = br.readLine()) != null) {
 
                // Reading from input file passed above
                // using getBytes() method
                byte arr[] = text.getBytes();
 
                // String converted to bytes
                fos.write(arr);
 
                // Copying the content of passed input file
                // 'inputgfgtext' file to outputfile.txt
            }
 
            // Display message when
            // file is successfully copied
            System.out.println(
                "File content copied to another one.");
        }
 
        // Catch block to handle generic exceptions
        catch (Exception e) {
 
            // Display the exception on the
            // console window
            System.out.println(e);
        }
 
        // Display message for successful execution of the
        // program
        System.out.println(
            "Resource are closed and message has been written into the gfgtextfile.txt");
    }
}

Producción: 

File content copied to another one.
Resource are closed and message has been written into the gfgtextfile.txt

Publicación traducida automáticamente

Artículo escrito por yashgupta2808 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *