當嘗試在已關閉的通道或對嘗試的操作關閉的通道上執行 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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。