当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java ClosedChannelException用法及代码示例


当尝试在已关闭的通道或对尝试的操作关闭的通道上执行 I/O 操作时,将调用类 ClosedChannelException。也就是说,如果抛出此异常,并不意味着通道完全关闭,而是对尝试的操作关闭。

用法:

public class ClosedChannelException
extends IOException

ClosedChannelException的层次结构如下:

现在让我们先看看这个类的构造函数的详细信息,然后再继续讨论它的方法。

构造函数 说明
ClosedChannelException() 构造类的实例

现在让我们讨论从Throwable class.继承的方法,它们以表格形式说明如下:

方法 说明
Throwable addSuppressed() 将此异常添加到被抑制的异常中,以便可以调度此异常。
Throwable fillInStackTrace() 在此 Throwable 对象中记录有关当前线程的堆栈帧的当前状态的信息,并填充执行堆栈跟踪。
Throwable getCause() 返回此 Throwable 的原因,如果原因未知,则返回 null。
Throwable getLocalizedMessage() 返回此 Throwable 的本地化说明。子类可以覆盖说明。如果子类不重写此方法,则结果将与getMessage()相同。
Throwable getMessage() 返回此 Throwable 的详细消息说明。
Throwable getStackTrace() 返回堆栈跟踪元素的数组,每个元素代表一个堆栈帧。允许访问 printStackTrace() 打印的堆栈跟踪信息。
Throwable getSuppressed() 返回一个数组,其中包含为了分派此异常而被抑制的所有异常。
Throwable initCause() 使用给定值初始化此 Throwable 的原因。
Throwable printStackTrace() 在错误输出流上打印此 Throwable 及其回溯。
Throwable printStackTrace() 在指定的 PrintStream 上打印此 Throwable 及其回溯。
Throwable printStackTrace() 将此 Throwable 及其回溯打印到指定的 PrintWriter。
Throwable setStackTrace() 设置此 Throwable 的堆栈跟踪元素。它是为远程过程调用框架和高级系统设计的,它允许客户端覆盖默认的堆栈跟踪。
Throwable toString() 以以下格式返回此 Throwable 的简短说明:此对象的类的名称:调用对象的 getLocalizedMessage() 的结果。如果getLocalizedMessage()返回null,则仅返回类名。

Note: this refers to the object in whose context the method is being called.

实现:我们本质上是要创建一个通道,关闭它,然后尝试在关闭的通道上执行读取操作。这将触发 ClosedChannelException。步骤如下:

  1. 我们将创建 RandomAccessFile 类的实例,以 “rw”(即读写模式)从系统中打开文本文件。
  2. 现在我们使用 FileChannel 类创建一个到打开的文件的通道。
  3. 之后,我们创建一个缓冲区,使用 ByteBuffer 类从该通道读取数据字节。
  4. 此外,Charset class,我们将编码方案定义为“US-ASCII”。
  5. 最后,在开始读取该文件的过程之前,我们关闭通道。

Therefore, when a read operation is attempted on this channel a ClosedChannelException is thrown. We catch the Exception in the catch block where you may add any Exception handling that is specific to your requirement, here we are only printing a message.

示例

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");
        }
    }
}

输出:



相关用法


注:本文由纯净天空筛选整理自ManasiKirloskar大神的英文原创作品 ClosedChannelException in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。