Java.io Packages Tutorial

Java.io 包教程

Java - java.io 包

java.io包是Java SDK的標準包。它包含用於透過資料流進行系統輸入和輸出、序列化以及檔案系統的類。此包非常有用,因為它提供流來處理來自各種來源的輸入,例如鍵盤、檔案系統、網路等。類似地,此包包含用於寫入各種來源的流類。本參考將引導您瞭解java.io包中提供的簡單而實用的方法。

匯入 java.io 包

作為Java的內建包,我們不需要下載任何外部庫即可使用java.io包及其所有類,可以使用以下語法匯入:

import java.io.*;

在這裡,我們使用*運算子匯入java.io包中的所有類,現在程式中可以使用任何類。對於特定類,例如InputStream,我們可以使用以下語法匯入類:

import java.io.InputStream;

為什麼在Java程式中使用java.io包

Java.io包中的類包含流/讀取器/寫入器類,可以使用統一模式讀取和寫入各種來源。以下列表顯示了java.io包中部分類別的類。

  • 輸入流 - 像ByteArrayInputStream、FileInputStream等輸入流類有助於從諸如位元組陣列、檔案之類的來源讀取資料作為資料流,我們也可以使用緩衝來讀取完整的內容。

  • 輸出流 - 類似地,我們有OutputStream類,例如ByteArrayOutputStream、FileOutputStream等,可用於寫入幾乎任何型別的目標。

  • 錯誤流 - 錯誤流類似於OutputStream,用於將錯誤寫入源。

  • 讀取器 - 讀取器類是面向字元的,專門用於讀取基於文字的內容。

  • 寫入器 - 同樣,寫入器類專門用於將基於文字的內容寫入任何目標。

java.io包中的重要類

以下是java.io包中重要類的列表:

  • BufferedInputStream - BufferedInputStream類為另一個輸入流新增功能,即緩衝輸入和支援mark和reset方法的能力。

  • BufferedOutputStream - BufferedOutputStream類實現緩衝輸出流。透過設定這樣的輸出流,應用程式可以將位元組寫入底層輸出流,而無需為寫入的每個位元組都必須呼叫底層系統。

  • BufferedReader - BufferedReader類從字元輸入流讀取文字,緩衝字元以便高效地讀取字元、陣列和行。

  • BufferedWriter - BufferedWriter類將文字寫入字元輸出流,緩衝字元以便高效地寫入單個字元、陣列和字串。

  • ByteArrayInputStream - ByteArrayInputStream類包含一個內部緩衝區,其中包含可以從流中讀取的位元組。內部計數器跟蹤read方法要提供的下一個位元組。

  • ByteArrayOutputStream - ByteArrayOutputStream類實現輸出流,其中資料寫入位元組陣列。緩衝區會隨著向其寫入資料而自動增長。

  • CharArrayReader - CharArrayReader類實現字元緩衝區,可用作字元輸入流。

  • CharArrayWriter - CharArrayWriter類實現字元緩衝區,可用作Writer。緩衝區會隨著向流中寫入資料而自動增長。

  • Console - Console類提供方法來訪問與當前Java虛擬機器關聯的基於字元的控制檯裝置(如果有)。

  • DataInputStream - DataInputStream類允許應用程式以與機器無關的方式從底層輸入流讀取原始Java資料型別。

  • DataOutputStream - DataOutputStream類允許應用程式以可移植的方式將原始Java資料型別寫入輸出流。然後,應用程式可以使用資料輸入流讀取回資料。

  • File - Java File類以抽象方式表示檔案和目錄路徑名。此類用於建立檔案和目錄、檔案搜尋、檔案刪除等。File物件表示磁碟上的實際檔案/目錄。

  • FileDescriptor - FileDescriptor類例項充當對底層特定於機器的結構的不透明控制代碼,該結構表示開啟的檔案、開啟的套接字或其他位元組源或接收器。

  • FileInputStream - FileInputStream類從檔案系統中的檔案獲取輸入位元組。可用的檔案取決於主機環境。

  • FileOutputStream - FileOutputStream類是用於將資料寫入File或FileDescriptor的輸出流。

  • FilePermission - FilePermission類表示對檔案或目錄的訪問許可權。它由路徑名和對該路徑名有效的操作集組成。

  • FileReader - FileReader類是用於讀取字元檔案的便捷類。

  • FileWriter - FileWriter類是用於寫入字元檔案的便捷類。

  • FilterInputStream - FilterInputStream類包含其他輸入流,它將其用作其基本資料來源,可能在此過程中轉換資料或提供其他功能。

  • FilterOutputStream - FilterOutputStream類是所有過濾輸出流類的超類。

  • FilterReader - FilterReader類用於讀取過濾的字元流。

  • FilterWriter - FilterWriter類用於寫入過濾的字元流。

  • InputStream - InputStream類是所有表示位元組輸入流的類的超類。需要定義InputStream子類的應用程式必須始終提供返回下一個輸入位元組的方法。

  • InputStreamReader - InputStreamReader類是位元組流到字元流的橋樑。它讀取位元組並使用指定的字元集將其解碼為字元。

  • LineNumberInputStream - LineNumberInputStream類是一個輸入流過濾器,它提供了跟蹤當前行號的附加功能。一行是位元組序列,以回車符 ('\r')、換行符 ('\n') 或回車符後立即跟換行符結尾。

  • LineNumberReader - LineNumberReader類是一個緩衝字元輸入流,它跟蹤行號。一行被認為以換行符 ('\n')、回車符 ('\r') 或回車符後立即跟換行符中的任何一個結束。

  • ObjectInputStream - ObjectInputStream類反序列化以前使用ObjectOutputStream寫入的原始資料和物件。

  • ObjectInputStream.GetField - ObjectInputStream.GetField類提供對從輸入流讀取的持久欄位的訪問。

  • ObjectOutputStream - ObjectOutputStream類將原始資料型別和Java物件的圖形寫入OutputStream。可以使用ObjectInputStream讀取(重建)這些物件。

  • Java.io - ObjectOutputStream.PutField - ObjectOutputStream.PutField類提供對要寫入ObjectOutput的持久欄位的程式設計訪問。

  • ObjectStreamClass −ObjectStreamClass 類是序列化的類描述符。它包含類的名稱和 serialVersionUID。可以使用 lookup 方法查詢/建立在此 Java 虛擬機器中載入的特定類的 ObjectStreamClass。

  • ObjectStreamField −ObjectStreamField 類是對可序列化類中可序列化欄位的描述。ObjectStreamField 陣列用於宣告類的可序列化欄位。

  • OutputStream −OutputStream 類是所有表示位元組輸出流的類的超類。輸出流接受輸出位元組並將它們傳送到某個接收器。需要定義 OutputStream 子類的應用程式必須至少提供一個寫入一個輸出位元組的方法。

  • OutputStreamWriter −OutputStreamWriter 類是字元流到位元組流的橋樑。寫入其中的字元使用指定的字元集編碼為位元組。

  • PipedInputStream −PipedInputStream 類是一個管道輸入流,可以連線到管道輸出流,然後管道輸入流提供寫入管道輸出流的任何資料位元組。

  • PipedOutputStream −PipedOutputStream 類是一個管道輸出流,可以連線到管道輸入流以建立通訊管道。

  • PipedReader −PipedReader 類是管道字元輸入流。

  • PipedWriter −PipedWriter 類是管道字元輸出流。

  • PrintStream −PrintStream 類向另一個輸出流新增功能,即方便地列印各種資料值的表示形式的能力。

  • PrintWriter −PrintWriter 類將物件的格式化表示形式列印到文字輸出流。

  • PushbackInputStream −PushbackInputStream 類向另一個輸入流新增功能,即“回推”或“取消讀取”一個位元組的能力。

  • PushbackReader −PushbackReader 類是一個字元流讀取器,允許將字元回推到流中。

  • RandomAccessFile −RandomAccessFile 類檔案類似於儲存在檔案系統中的大型位元組陣列。此類的例項同時支援對隨機訪問檔案的讀取和寫入。

  • Reader −Reader 類是用於讀取字元流的抽象類。

  • SequenceInputStream −SequenceInputStream 類表示其他輸入流的邏輯串聯。它從一個有序的輸入流集合開始,從第一個流讀取直到到達檔案結尾,然後從第二個流讀取,依此類推,直到到達最後一個包含的輸入流的檔案結尾。

  • SerializablePermission −SerializablePermission 類用於可序列化許可權。SerializablePermission 包含一個名稱(也稱為“目標名稱”),但不包含操作列表;您要麼擁有指定的許可權,要麼沒有。目標名稱是可序列化許可權的名稱。

  • StreamTokenizer −StreamTokenizer 類獲取輸入流並將其解析為“標記”,允許一次讀取一個標記。流標記器可以識別識別符號、數字、帶引號的字串和各種註釋樣式。

  • StringBufferInputStream −StringBufferInputStream 類允許應用程式建立一個輸入流,其中讀取的位元組由字串的內容提供。應用程式還可以使用 ByteArrayInputStream 從位元組陣列讀取位元組。此類僅使用字串中每個字元的低八位。此類已被 Oracle 棄用,不應再使用。

  • StringReader −StringReader 類是一個字元流,其源是字串。

  • StringWriter −StringWriter 類是一個字元流,它將其輸出收集到一個字串緩衝區中,然後可以使用該緩衝區構造一個字串。關閉 StringWriter 沒有效果。在流關閉後,可以呼叫此類中的方法,而不會生成 IOException。

  • Writer −Writer 類是用於寫入字元流的抽象類。

java.io 包的示例

練習以下示例以學習 java.io 包類的概念和用法。

java.io.ByteArrayInputStream 示例

以下程式說明了 ByteArrayInputStream 支援的幾種方法 −

package com.tutorialspoint;

import java.io.ByteArrayInputStream;
import java.io.IOException;

public class ByteStreamTest {
   public static void main(String[] args) throws IOException {
      byte[] buf = {65, 66, 67, 68, 69};
      ByteArrayInputStream bais = null;
      
      try {
         // create new byte array input stream
         bais = new ByteArrayInputStream(buf);
         
         int b =0;
         
         // read till the end of the stream
         while((b = bais.read())!=-1) {
            
            // convert byte to character
            char c = (char)b;
            
            // print
            System.out.println("byte :"+b+"; char : "+ c);
            
         }
         System.out.print(bais.read()+" Reached the end");
         
      } catch(Exception e) {
         // if I/O error occurs
         e.printStackTrace();
      } finally {
         if(bais!=null)
            bais.close();
      }
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果 −

byte :65; char : A
byte :66; char : B
byte :67; char : C
byte :68; char : D
byte :69; char : E
-1 Reached the end

java.io.ByteArrayOutputStream 示例

以下程式說明了 ByteArrayOutputStream 支援的幾種方法 −

package com.tutorialspoint;

import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class BufferedOutputStreamDemo {
   public static void main(String[] args) throws Exception {
      ByteArrayOutputStream baos = null;
      BufferedOutputStream bos = null;
		
      try {
         // create new ByteArrayOutputStream
         baos = new ByteArrayOutputStream();

         // create new BufferedOutputStream with baos
         bos = new BufferedOutputStream(baos);
			
         // assign integer
         int b = 87;

         // write to stream
         bos.write(b);

         // force the byte to be written to baos
         bos.flush();
			
         // convert ByteArrayOutputStream to bytes
         byte[] bytes = baos.toByteArray();	

         // prints the byte
         System.out.println(bytes[0]);
         
      } catch(IOException e) {
         // if I/O error occurs.
         e.printStackTrace();
      } finally {
         // releases any system resources associated with the stream
         if(baos!=null)
            baos.close();
         if(bos!=null)
            bos.close();
      }
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果 −

87

java.io.PrintWriter 示例

以下程式說明了 PrintWriter 支援的幾種方法 −

package com.tutorialspoint;

import java.io.*;

public class PrintWriterDemo {
   public static void main(String[] args) {
      String s = "Hello world.";
      
      try {
         // create a new writer
         PrintWriter pw = new PrintWriter(System.out);

         // print string
         pw.print(s);

         // change the line
         pw.println();

         // print another string
         pw.print("This is an example.");

         // flush the writer
         pw.flush();
      } catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}

輸出

讓我們編譯並執行上述程式,這將產生以下結果 −

Hello world.
This is an example.

何時使用 java.io 包?

每當我們需要執行 I/O 操作時,都可以依賴 java.io 包中提供的 I/O 類。本參考是為初學者編寫的,旨在幫助他們瞭解 Java.io 包中所有方法的基本功能。

先決條件

在開始練習本參考中提供的各種型別的示例之前,我假設您已經瞭解基本的 Java 程式設計。

廣告