ClosedChannelException en Java con ejemplos

La clase ClosedChannelException se invoca cuando se intenta una operación de E/S en un canal cerrado o un canal que está cerrado a la operación intentada. Es decir, si se lanza esta excepción, sin embargo, no implica que el canal esté completamente cerrado, sino que está cerrado al intento de operación.

Sintaxis:

public class ClosedChannelException
extends IOException

La jerarquía de ClosedChannelException es la siguiente:

Ahora veamos los detalles del constructor de esta clase antes de continuar con sus métodos.

Constructor Descripción
Excepción de canal cerrado() Construye una instancia de la clase.

Ahora analicemos los métodos heredados de la clase Throwable. Se representan en formato tabular a continuación como sigue:

Método Descripción
addSuppressed (excepción arrojable) Agregue esta excepción a las excepciones que se suprimieron para poder enviar esta excepción.
llenarInStackTrace() Registra dentro de este objeto Throwable información sobre el estado actual del marco de la pila para el subproceso actual y completa el seguimiento de la pila de ejecución.
obtenerCausa() Devuelve la causa de este Throwable o nulo si se desconoce la causa.
obtenerMensajeLocalizado() Devuelve una descripción localizada de este Throwable. Las subclases pueden anular la descripción. Si la subclase no anula este método, el resultado será el mismo que el de getMessage().
obtener mensaje() Devuelve la descripción detallada del mensaje de este Throwable.
obtenerStackTrace() Devuelve una array de elementos de seguimiento de pila, cada uno de los cuales representa un marco de pila. Da acceso a la información de seguimiento de la pila impresa por printStackTrace().
getSuppressed() Devuelve una array que contiene todas las excepciones que se suprimieron para enviar esta excepción.
initCause (causa descartable) Inicializa la causa de este Throwable con el valor dado.
imprimirStackTrace() Imprime este Throwable y su seguimiento en el flujo de salida de error.
printStackTrace(PrintStream s) Imprime este Throwable y su seguimiento en el PrintStream especificado.
printStackTrace(PrintWriter s) Imprime este Throwable y su seguimiento al PrintWriter especificado.
setStackTrace(StackTraceElement[] stackTrace) Establece los elementos traza de la pila de este Throwable. Está diseñado para marcos de llamadas a procedimientos remotos y sistemas avanzados, permite al cliente anular el seguimiento de pila predeterminado. 
Enstringr() Devuelve una breve descripción de este Throwable en el formato Nombre de la clase de este objeto: Resultado de invocar el getLocalizedMessage() del objeto. Si getLocalizedMessage() devuelve un valor nulo, solo se devuelve el nombre de la clase.

Nota: esto se refiere al objeto en cuyo contexto se llama al método.

Implementación: esencialmente vamos a crear un canal, cerrarlo y luego intentar realizar una operación de lectura en un canal cerrado. Esto activará la ClosedChannelException. Los pasos son los siguientes:

  1. Crearemos una instancia de la clase RandomAccessFile para abrir un archivo de texto de su sistema en «rw», es decir, modo de lectura y escritura.
  2. Ahora creamos un canal para el archivo abierto usando la clase FileChannel .
  3. Después de eso, creamos un búfer para leer bytes de datos de este canal usando la clase ByteBuffer .
  4. Además, clase Charset, definimos el esquema de codificación como «US-ASCII».
  5. Finalmente, antes de iniciar el proceso de lectura de este archivo, cerramos el canal.

Por lo tanto, cuando se intenta una operación de lectura en este canal, se lanza una excepción ClosedChannelException. Capturamos la Excepción en el bloque de captura donde puede agregar cualquier manejo de Excepción que sea específico para su requerimiento, aquí solo estamos imprimiendo un mensaje.

Ejemplo

Java

// Java Program to Illustrate Working of
// ClosedChannelException
 
// Importing required classes
// Input output classes
import java.io.IOException;
import java.io.RandomAccessFile;
// Classes from java.nio package
import java.nio.ByteBuffer;
import java.nio.channels.ClosedChannelException;
import java.nio.channels.FileChannel;
import java.nio.charset.Charset;
 
// Main class
// For ClosedChannelException
public class GFG {
 
    // Main driver method
    public static void main(String args[])
        throws IOException
    {
 
        // Try block to check for exceptions
        try {
 
            // Open a file in your system using the
            // RandomAccessFile class Custom local directory
            // on machine
            RandomAccessFile randomAccessFile
                = new RandomAccessFile(
                    "D:/Documents/textDoc.txt", "rw");
 
            // Now creating a channel using the FileChannel
            // class to the file opened using the
            // RandomAccessFile class
            FileChannel fileChannel
                = randomAccessFile.getChannel();
 
            // Create a buffer to read bytes from the
            // channel using the ByteBuffer class
            ByteBuffer byteBuffer
                = ByteBuffer.allocate(512);
            Charset charset = Charset.forName("US-ASCII");
 
            // Close the file channel
            // We do this so the exception is thrown
            fileChannel.close();
 
            // Try to read from the fileChannel which is now
            // closed
            while (fileChannel.read(byteBuffer) > 0) {
 
                byteBuffer.rewind();
                System.out.print(
                    charset.decode(byteBuffer));
                byteBuffer.flip();
            }
 
            // Closing the connections to free up memory
            // resources using close() method
            randomAccessFile.close();
        }
 
        // Catch block to handle the exceptions
 
        // Handling Application specific Exception
        catch (ClosedChannelException e) {
 
            // Print message if exception is occurred
            System.out.println(
                "ClosedChannelException has occurred");
        }
    }
}

Producción:

Publicación traducida automáticamente

Artículo escrito por ManasiKirloskar 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 *