Java中FileInputStream和FileReader的區別


在使用 Java 進行檔案輸入時,工程師經常會遇到兩個常用的類:FileInputStream 和 FileReader。這兩個類都用於從檔案中讀取資訊,但它們在方法和使用場景上有所不同。在本文中,我們將探討 FileInputStream 和 FileReader 之間的區別、它們的語法結構以及各自的程式碼示例。

語法

FileInputStream

FileInputStream inputStream = new FileInputStream("file.txt");

FileReader

FileReader fileReader = new FileReader("file.txt");

語法解釋

FileInputStream

FileInputStream 類用於從檔案中讀取二進位制資料。它以檔案路徑作為引數,並建立一個用於從指定檔案讀取資料的流。

FileReader

另一方面,FileReader 類用於從檔案中讀取字元資料。它也以檔案路徑作為引數,並建立一個用於從指定檔案讀取字元資料的讀取器。

方法 1:FileInputStream

FileInputStream 類主要用於讀取二進位制資料,例如影像、音訊檔案或任何其他非文字資料。以下是使用 FileInputStream 的演算法:

演算法

  • 透過提供檔案路徑建立 FileInputStream 例項。

  • 建立一個緩衝區或位元組陣列來儲存從檔案中讀取的資料。

  • 使用 FileInputStream 的 read() 方法將資料從檔案讀取到緩衝區/陣列中。

  • 根據需要處理資料。

  • 使用 close() 方法關閉 FileInputStream 以釋放系統資源。

示例

import java.io.FileInputStream;
import java.io.IOException;

public class FileInputStreamExample {
   public static void main(String[] args) {
      try {
         FileInputStream inputStream = new FileInputStream("file.txt");
         byte[] buffer = new byte[1024];
         int bytesRead = inputStream.read(buffer);
         while (bytesRead != -1) {
            String data = new String(buffer, 0, bytesRead);
            System.out.print(data);
            bytesRead = inputStream.read(buffer);
         }
         inputStream.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

輸出

Hello, World!
This is a sample text file.
It contains some text for demonstration purposes.
Feel free to modify or replace this content as needed.

在本例中,我們使用檔案路徑 "file.txt" 建立了一個 FileInputStream 例項。然後,我們建立一個名為 "buffer" 的位元組陣列來儲存從檔案中讀取的資料。read() 方法用於將資料讀取到緩衝區中,我們根據需要處理資料。read() 方法返回讀取的位元組數,如果返回 -1,則表示檔案結束。最後,我們關閉 FileInputStream 以釋放系統資源。

方法 2:FileReader

FileReader 類專門用於從檔案中讀取基於字元的資料,例如文字檔案。以下是使用 FileReader 的演算法:

演算法

  • 透過提供檔案路徑建立 FileReader 例項。

  • 建立一個緩衝區或字元陣列來儲存從檔案中讀取的資料。

  • 使用 FileReader 的 read() 方法將資料從檔案讀取到緩衝區/陣列中。

  • 根據需要處理資料。

  • 使用 close() 方法關閉 FileReader 以釋放系統資源。

示例

import java.io.FileReader;
import java.io.IOException;

public class FileReaderExample {
   public static void main(String[] args) {
      try {
         FileReader fileReader = new FileReader("file.txt");
         char[] buffer = new char[1024];
         int charsRead = fileReader.read(buffer);
         while (charsRead != -1) {
            String data = new String(buffer, 0, charsRead);
            System.out.print(data);
            charsRead = fileReader.read(buffer);
         }
         fileReader.close();
      } catch (IOException e) {
         e.printStackTrace();
      }
   }
}

輸出

Hello, World!
This is a sample text file.
It contains some text for demonstration purposes.
Feel free to modify or replace this content as needed.

在本例中,我們使用檔案路徑 "file.txt" 建立了一個 FileReader 例項。然後,我們建立一個名為 "buffer" 的字元陣列來儲存從檔案中讀取的資料。read() 方法用於將資料讀取到緩衝區中,我們根據需要處理資料。read() 方法返回讀取的字元數,如果返回 -1,則表示檔案結束。最後,我們關閉 FileReader 以釋放系統資源。

Java中FileInputStream和FileReader的區別

屬性

FileInputStream

FileReader

用途

用於讀取二進位制資料

用於讀取字元資料

資料

以位元組形式讀取資料

以字元形式讀取資料

編碼

沒有內建編碼支援

支援編碼轉換

用法

適用於非文字資料

適用於文字資料

效能

讀取二進位制資料速度更快

讀取大型檔案或非文字資料速度較慢

結論

總之,FileInputStream 和 FileReader 都是 Java 中用於從檔案讀取資料的寶貴類,但它們具有不同的用途,並且在完全不同的場景中使用。FileInputStream 適用於讀取二進位制資料,而 FileReader 非常適合讀取基於字元的資訊,例如文字檔案。通過了解它們之間的區別和適當的使用場景,開發人員可以在使用 Java 進行檔案輸入時做出明智的決策。

更新於: 2023年7月28日

693 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.