当尝试在已关闭的通道或对尝试的操作关闭的通道上执行 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。步骤如下:
- 我们将创建 RandomAccessFile 类的实例,以 “rw”(即读写模式)从系统中打开文本文件。
- 现在我们使用 FileChannel 类创建一个到打开的文件的通道。
- 之后,我们创建一个缓冲区,使用 ByteBuffer 类从该通道读取数据字节。
- 此外,Charset class,我们将编码方案定义为“US-ASCII”。
- 最后,在开始读取该文件的过程之前,我们关闭通道。
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");
}
}
}
输出:
相关用法
- Java Closeable用法及代码示例
- Java Closures用法及代码示例
- Java Clock equals()用法及代码示例
- Java Clock fixed()用法及代码示例
- Java Clock getZone()用法及代码示例
- Java Clock hashCode()用法及代码示例
- Java Clock instant()用法及代码示例
- Java Clock millis()用法及代码示例
- Java Clock offset()用法及代码示例
- Java Clock system()用法及代码示例
- Java Clock systemDefaultZone()用法及代码示例
- Java Clock systemUTC()用法及代码示例
- Java Clock tick()用法及代码示例
- Java Clock tickSeconds()用法及代码示例
- Java Clock tickMinutes()用法及代码示例
- Java Clock withZone()用法及代码示例
- Java CloneNotSupportedException用法及代码示例
- Java Cloneable用法及代码示例
- Java ClassLoader.clearAssertionStatus()用法及代码示例
- Java ClassLoader.getSystemResource()用法及代码示例
- Java Class asSubclass()用法及代码示例
- Java Class getSuperClass()用法及代码示例
- Java Class isAnonymousClass()用法及代码示例
- Java Class isPrimitive()用法及代码示例
- Java Class newInstance()用法及代码示例
注:本文由纯净天空筛选整理自ManasiKirloskar大神的英文原创作品 ClosedChannelException in Java with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。