IO流字元流知識點整理

2021-07-30 12:02:35 字數 3080 閱讀 9012

1.字元流是什麼

* 字元流是可以直接讀寫字元的io流

* 字元流讀取字元, 就要先讀取到位元組資料, 然後轉為字元. 如果要寫出字元, 需要把字元轉為位元組再寫出.    

* 2.filereader

* filereader類的read()方法可以按照字元大小讀取

filereader fr = new filereader("aaa.txt");

//建立輸入流物件,關聯aaa.txt

int ch;

while((ch = fr.read()) != -1)

fr.close();

字元流filewriter

* filewriter類的write()方法可以自動把字元轉為位元組寫出

filewriter fw = new filewriter("aaa.txt");

fw.write("aaa");

fw.close();

字元流的拷貝

filereader fr = new filereader("a.txt");

filewriter fw = new filewriter("b.txt");

int ch;

while((ch = fr.read()) != -1)

fr.close();

fw.close();

什麼情況下使用字元流

* 字元流也可以拷貝文字檔案, 但不推薦使用. 因為讀取時會把位元組轉為字元, 寫出時還要把字元轉回位元組.

* 程式需要讀取一段文字, 或者需要寫出一段文字的時候可以使用字元流

* 讀取的時候是按照字元的大小讀取的,不會出現半個中文

* 寫出的時候可以直接將字串寫出,不用轉換為位元組陣列

字元流是否可拷貝非純文字的檔案

* 不可以拷貝非純文字的檔案

* 因為在讀的時候會將位元組轉換為字元,在轉換過程中,可能找不到對應的字元,就會用?代替,寫出的時候會將字元轉換成位元組寫出去

* 如果是?,直接寫出,這樣寫出之後的檔案就亂了,看不了了  

自定義字元陣列的拷貝

filereader fr = new filereader("aaa.txt");//建立字元輸入流,關聯aaa.txt

filewriter fw = new filewriter("bbb.txt");//建立字元輸出流,關聯bbb.txt

int len;

char arr = new char[1024*8];//建立字元陣列

while((len = fr.read(arr)) != -1)

fr.close(); //關流釋放資源

fw.close();

帶緩衝的字元流

* bufferedreader的read()方法讀取字元時會一次讀取若干字元到緩衝區, 然後逐個返回給程式, 降低讀取檔案的次數, 提高效率

* bufferedwriter的write()方法寫出字元時會先寫到緩衝區, 緩衝區寫滿時才會寫到檔案, 降低寫檔案的次數, 提高效率

bufferedreader br = new bufferedreader(new filereader("aaa.txt"));//建立字元輸入流物件,關聯aaa.txt

bufferedwriter bw = new bufferedwriter(new filewriter("bbb.txt"));//建立字元輸出流物件,關聯bbb.txt

int ch;

while((ch = br.read()) != -1)

br.close(); //關流

bw.close();  

readline()和newline()方法

* bufferedreader的readline()方法可以讀取一行字元(不包含換行符號)

* bufferedwriter的newline()可以輸出乙個跨平台的換行符號"\r\n"

bufferedreader br = new bufferedreader(new filereader("aaa.txt"));

bufferedwriter bw = new bufferedwriter(new filewriter("bbb.txt"));

string line;

while((line = br.readline()) != null)

br.close();

bw.close(); 

linenumberreader) 

* linenumberreader是bufferedreader的子類, 具有相同的功能, 並且可以統計行號

* 呼叫getlinenumber()方法可以獲取當前行號

* 呼叫setlinenumber()方法可以設定當前行號

* linenumberreader lnr = new linenumberreader(new filereader("aaa.txt"));

string line;

lnr.setlinenumber(100);//設定行號

while((line = lnr.readline()) != null)

lnr.close(); 

使用指定的碼表讀寫字元)

* filereader是使用預設碼表讀取檔案, 如果需要使用指定碼表讀取, 那麼可以使用inputstreamreader(位元組流,編碼表)

* filewriter是使用預設碼表寫出檔案, 如果需要使用指定碼表寫出, 那麼可以使用outputstreamwriter(位元組流,編碼表)

* bufferedreader br = //高效的用指定的編碼表讀

new bufferedreader(new inputstreamreader(new fileinputstream("utf-8.txt"), "utf-8"));

bufferedwriter bw = //高效的用指定的編碼表寫

new bufferedwriter(new outputstreamwriter(new fileoutputstream("gbk.txt"), "gbk"));

int ch;

while((ch = br.read()) != -1)

br.close();

bw.close();

IO流知識點整理

io流中有4個底層基類 位元組流 inputstream,outputstream 字元流 reader,writer 字元流,其實就是位元組流讀取文字位元組資料後,不直接操作而是 先查指定的編碼表,獲得對應的文字。再對這個文字進行操作。字串的緩衝區 緩衝區的出現提高了對資料的讀寫效率,對應類 bu...

IO流(字元流)

1.概念 2.寫入與讀取 3.文字檔案的拷貝 4.使用字元流的情況 5.使用bufferedreader和bufferedwriter 6.裝飾設計模式 7.不同碼表讀取字元的轉換 字元流 直接讀取字元的io 字元流讀取字元,先讀取位元組然後轉換為字元,寫入時將字元轉化為位元組後寫入 try fil...

IO流 字元流

字元流,以字元為單位讀寫資料 reader 轉換流 inpustreamreader filereader bufferedreader writer 轉換流 outstreamwriter filewriter bufferedwriterreader 的基本方法 讀取乙個字元並以整數的形式返回,...