在 Java 中,字符流主要用于處理字符數據,比如文本文件。字符流直接以字符為單位進行讀寫操作,自動處理字符與底層字節之間的轉換,因此非常適合處理包含文本數據的文件。Java 中處理字符流的核心抽象類是 Reader
和 Writer
。
Reader
Reader
是所有字符輸入流的父類,它是一個抽象類。常用的 Reader
實現類包括:
FileReader
:用于從文件中讀取數據。BufferedReader
:對其他字符輸入流進行緩沖,從而提供了讀取文本行(readLine
)的便捷方法。
Writer
Writer
是所有字符輸出流的父類,它也是一個抽象類。常用的 Writer
實現類包括:
FileWriter
:用于向文件中寫入數據。BufferedWriter
:對其他字符輸出流進行緩沖,提供了更高效的寫入性能,同時提供了便捷的newLine
方法用于寫入行分隔符。
使用示例
下面是使用字符流讀取和寫入文件的簡單示例。
讀取文件
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;public class ReadFileExample {public static void main(String[] args) {String line;try (BufferedReader reader = new BufferedReader(new FileReader("example.txt"))) {while ((line = reader.readLine()) != null) {System.out.println(line);}} catch (IOException e) {e.printStackTrace();}}
}
寫入文件
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;public class WriteFileExample {public static void main(String[] args) {try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) {writer.write("Hello, World!");writer.newLine(); // 寫入一個新行writer.write("Java Character Streams.");} catch (IOException e) {e.printStackTrace();}}
}
特點
- 自動字符編碼處理:字符流自動處理了字符到字節的轉換過程,根據系統默認的字符編碼或者指定的編碼來讀寫文本。
- 國際化:由于處理的是字符,字符流支持國際化文本數據。
- 高級功能:如
BufferedReader
和BufferedWriter
提供的額外功能,使得讀寫操作更加高效和方便。
注意事項
- 在處理二進制文件(如圖片、音頻等)時,應使用字節流(
InputStream
和OutputStream
)而不是字符流,以避免數據損壞。 - 考慮到不同平臺可能使用不同的字符編碼,有時需要在
FileReader
和FileWriter
的構造器中指定字符編碼,雖然 Java 默認使用平臺的字符編碼。在需要指定特定編碼時,可以使用InputStreamReader
和OutputStreamWriter
并顯式指定編碼方式。
字符流是處理文本數據的強大工具,它簡化了字符編碼的處理,并提供了對文本文件的高效讀寫操作。