IO流(字元流)

2021-09-29 10:43:58 字數 4296 閱讀 1675

1.概念

2.寫入與讀取

3.文字檔案的拷貝

4.使用字元流的情況

5.使用bufferedreader和bufferedwriter

6.裝飾設計模式

7.不同碼表讀取字元的轉換

字元流:直接讀取字元的io

字元流讀取字元,先讀取位元組然後轉換為字元,寫入時將字元轉化為位元組後寫入

try

filereader.

close()

;}catch

(exception e)

讀出檔案中的內容

如何識別字元

gbk碼表中,在系統未公升級之前,中文字元的碼值都是以負數形式存在的,系統公升級之後,中文的第乙個位元組的碼值為負數,當讀取到第乙個位元組為負值時,gbk讀取時就讀取兩個位元組。通過專案預設的碼表依次讀取乙個字元。

filewriter filewriter = null;

trycatch

(exception e)

filereader filereader = null;

try filereader.

close()

; filewriter.

close()

;}catch

(exception e)

注意事項:輸出流一定要關閉,在底層使用了快取區,如果不關流,可能不能寫入成功,內容一直在快取區中,關閉流可以使快取區的資料寫入檔案中。

public

static

void

main

(string[

] args)

throws ioexception

filereader.

close()

; filewriter.

close()

;}

原因:當字元流拷貝非純文字檔案時,會將位元組轉化為字元(根據位元組在對應的碼表中找對應的字元,但是在位元組拼接找字元的過程中可能出現錯誤,寫出的時候會將字元轉化為位元組寫出去,此時會將"?"也寫出,寫入也是亂的)

在使用小陣列之後我們就可以想到乙個更節省空間的方法,使用緩衝區

bufferedreader bufferedreader =

newbufferedreader

(new

filereader

("student.txt"))

;bufferedwriter bufferedwriter =

newbufferedwriter

(new

filewriter

("newnewstudent.txt"))

;int x;

while

((x = bufferedreader.

read()

)!=-1

)bufferedreader.

close()

;bufferedwriter.

close()

;

bufferedreader bufferedreader =

newbufferedreader

(new

filereader

("student.txt"))

;string line;

while

((line = bufferedreader.

readline()

)!= null)

bufferedreader.

close()

;

bufferedreader bufferedreader =

newbufferedreader

(new

filereader

("student.txt"))

;bufferedwriter bufferedwriter =

newbufferedwriter

(new

filewriter

("***.txt"))

;string line;

while

((line = bufferedreader.

readline()

)!= null)

bufferedreader.

close()

;bufferedwriter.

close()

;

newline()可以跨平台,而「\r\n」只適應windows系統。

linenumberreader linenumberreader =

newlinenumberreader

(new

filereader

("student.txt"))

;string s;

行號從n+1開始,原來的第一行,現在是n+1行

}

常使用類 inputstreamreader 和 outputstreamwriter

inputstreamreader inputstreamreader =

newinputstreamreader

(new

fileinputstream

("student.txt"),

"gbk");

outputstreamwriter outputstreamwriter =

newoutputstreamwriter

(new

fileoutputstream

("newstudent.txt"),

"utf-8");

int x;

while

((x = inputstreamreader.

read()

)!=-1

)inputstreamreader.

close()

;outputstreamwriter.

close()

;

建議增加緩衝區,進行進一步優化

bufferedreader bufferedreader =

newbufferedreader

(new

inputstreamreader

(new

fileinputstream

("student.txt"),

"gbk"))

;bufferedwriter bufferedwriter =

newbufferedwriter

(new

outputstreamwriter

(new

fileoutputstream

("newstudent,txt"),

"utf-8"))

;int x;

while

((x = bufferedreader.

read()

)!=-1

)bufferedreader.

close()

;bufferedwriter.

close()

;

**理解:

IO流 字元流

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

IO流 字元流

一 字元輸出流 明確目的地 filewriter fw new filewriter d j a1018 buffer.txt 建立字元緩衝流物件 bufferedwriter bw new bufferedwriter fw 單字元寫入 ascii碼表 bw.write 100 將字元刷入檔案 b...

IO流 字元流 IO流小結 IO流案例總結

1 字元流 掌握 1 位元組流操作中文資料不是特別的方便,所以就出現了轉換流。轉換流的作用就是把位元組流轉換字元流來使用。2 轉換流其實是乙個字元流 字元流 位元組流 編碼表 3 編碼表 a 就是由字元和對應的數值組成的一張表 b 常見的編碼表 ascii iso 8859 1 gb2312 gbk...