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 進行檔案輸入時做出明智的決策。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP