java.io 字符流
字符串基類
java.io 包中專門用于字符流處理的類,是以Reader和Writer為基礎(chǔ)派生的一系列類
字符串以字符為單位,根據(jù)碼表映射字符,一次可能讀多個(gè)字節(jié),只能處理字符類型的數(shù)據(jù)。
同類InputStream 和 OutputStream一樣,Reader 和 Writer 也是抽象類,只提供了一系列用于字符流處理的接口。他們的方法與類InputStream 和 OutputStream類似,只不過其中的參數(shù)換成字符或字符數(shù)組
Reader 是所有的輸入字符流的父類,他是一個(gè)抽象類
我們先來看一看基類 Reader 的方法,其用法與作用都與InputStream 和 OutputStream 類似,就不做過多的說明了
| 方法 | 返回值 |
|---|---|
| close() | void |
| mark(int readAheadLimit) | void |
| markSupported() | boolean |
| read() | int |
| rerad(char[] cbuf,int off,int len) | int |
| ready() | boolean |
| reset() | void |
| skip(long n) | long |
Writer 是所有的輸出字符流的父類,它是一個(gè)抽象類。Writer的方法:
| 方法 | 返回值 |
|---|---|
| close() | void |
| flush() | void |
| write(char[] cbuf) | void |
| write(char[] cbuf, int off,int len) | void |
| write(int c) | void |
| write(String str) | void |
| write(String str, int off, int len) | void |
InputStreamReader 和 OutputStreamWriter 是 java.io 包中用于處理字符流的最基本的類,用來在字節(jié)流和字符流之間作為中介:從字節(jié)輸入流讀入字節(jié),并按編碼規(guī)范轉(zhuǎn)換為字符;往字節(jié)輸出流寫字符時(shí)先將字符按編碼規(guī)范轉(zhuǎn)換為字節(jié)。使用這兩者進(jìn)行字符處理時(shí),在構(gòu)造方法中應(yīng)指定一定的平臺規(guī)范,以便把以字節(jié)方式表示的流轉(zhuǎn)換為特定平臺上的字符表示。
InputStreamReader(InputStream in); //缺省規(guī)范說明
//指定規(guī)范 enc
InputStreamReader(InputStream in, String enc);
OutputStreamWriter(OutputStream out); //缺省規(guī)范說明
//指定規(guī)范 enc
OutputStreamWriter(OutputStream out, String enc);
如果讀取的字符流不是來自本地時(shí)(比如網(wǎng)上某處與本地編碼方式不同的機(jī)器),那么在構(gòu)造字符輸入流時(shí)就不能簡單地使用缺省編碼規(guī)范,而應(yīng)該指定一種統(tǒng)一的編碼規(guī)范“ISO 8859_1”,這是一種映射到 ASCCII 碼的編碼方式,能夠在不同平臺之間正確轉(zhuǎn)換字符。
InputStreamReader ir = new InputStreamReader(is,"8859_1");
緩存流
同樣的,為了提高字符流處理的效率,java.io 中也提供了換存流
BufferedReader 和 BufferedWriter 其構(gòu)造方法與 BufferedInputStream 和 BufferedOutPutStream 相類似. 另外,除了read() 和 write() 方法外,它還提供了整行字符處理方法:
- public String readLine() : BufferedReader 的方法,從輸入流中讀取一行字符,行結(jié)束標(biāo)志 \n 、\r 或者兩者在一起(這是根據(jù)系統(tǒng)而定的)
- public void newLine() : BufferedWriter 的方法,向輸出流中寫入一個(gè)行結(jié)束標(biāo)志,它不是簡單地?fù)Q行符 \n 或 \r , 而是系統(tǒng)定義的行隔離標(biāo)志(line separator)
看一看例子:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class FileToUnicode {
public static void main(String args[]) {
try {
FileInputStream fis = new FileInputStream("file1.txt");
InputStreamReader dis = new InputStreamReader(fis);
BufferedReader reader = new BufferedReader(dis);
String s;
//每次讀取一行,當(dāng)改行為空時(shí)結(jié)束
while((s = reader.readLine()) != null){
System.out.println("read:" + s);
}
dis.close();
}
catch(IOException e) {
System.out.println(e);
}
}
}
如file1.txt 的內(nèi)容如下:
abc
efg
hij
其他字符流類
在這里我們就列舉一下有哪些類,具體的就不仔細(xì)列舉了。
- 對字符數(shù)組進(jìn)行處理: CharArrayReader、CharArrayWrite
- 對文本文件進(jìn)行處理:FileReader、FileWriter
- 對字符串進(jìn)行處理:StringReader、StringWriter
- 過濾字符流:FilterReader、FileterWriter
- 管道字符流:PipedReader、PipedWriter
- 行處理字符流:LineNumberReader
- 打印字符流:PrintWriter
類有千萬,方法更是不計(jì)其數(shù),所以沒有必要去掌握所有的方法和類,只需要知道常見常用的就行了,而大多數(shù)的類和方法,希望大家有一個(gè)印象,當(dāng)我們在實(shí)際開放的時(shí)間,能夠想到,并且借助其他工具去查詢我們需要的方法的應(yīng)用方式就可以了。
總結(jié)
本節(jié)課程主要學(xué)習(xí)了Java字符流的相關(guān)基礎(chǔ)的相關(guān)基礎(chǔ)知識和用法,下一節(jié)我們將進(jìn)入文件操作/隨機(jī)訪問文件的學(xué)習(xí)。