當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。