資料流分為輸入流(inputstream)和輸出流(outputstream)
inputstream屬於位元組輸入類,system.in 作為位元組輸入流類inputstream 的物件in 實現標準的輸入,其中有read方法從鍵盤接收資料;
inputstream的子類fileinputstream(檔案位元組輸入流類)
fileinputstream用於順序訪問本地檔案,讀取原始位元組流。
如:fileinputstream fis = new fileinputstream(「存放檔案的路徑」);
fileinputstream(file file) 通過開啟乙個到實際檔案的連線來建立乙個fileinputstream,該檔案通過檔案系統中的file物件file指定。而fileinputstream(string name)通過檔案系統中的路徑名name 指定。
//乙個file的簡單運用
file file = new file(fd.getdirectory(),fd.getfile());//獲取此檔案對話方塊的目錄,根據指定的路徑中的檔案返回相應的file物件
fileinputstream現階段最常見的兩個方法close()和read()
outputstream 屬於位元組輸出類,system.out 作為列印流類printstream的物件out實現標準輸出,其中有print和println兩個方法;system.err 與system.out相同,而system.out是實現printstream的物件out的標準輸出,system.err是實現標準的錯誤輸出。
outputstream的子類fileoutputstream(檔案位元組輸出流)
用於將資料寫入file或filedescriptor的輸入流。
例如:fileoutputstream fos = new fileoutputstream(「檔案路徑」);
fos.write(「hell world」);
主要的方法有close()和write()
reader類和writer類
它們專門處理字元流,這兩類都是抽象類.
reader常見的方法:int read():讀取乙個字元。返回的是讀到的那個字元,如果讀到流的末尾,返回-1。int read(char):將讀到的字元存入指定的陣列中,返回的是讀到的字元個數,也就是往陣列裡裝的元素的個數。如果讀到流的末尾,返回-1。close():讀取字元其實用的是window系統的功能,就希望使用完畢後,進行資源的釋放。
reader的子類filereader:
用於讀取文字檔案的流物件,用於關聯文字檔案。(讀取字元檔案)
在使用filereader操作文字資料時,該物件使用的是預設的編碼表,如果要使用指定的編碼表時,必須使用轉換流。
filereader fr = new filereader(」a.txt」);//文字檔案中的資料使用的是本系統預設的gbk
等同於inputstreamreader isr = new inputstreamreader(new fileinputstream(「a.txt」));
如果a.txt中的檔案中的字元資料是通過utf-8的形式編碼。那麼在讀取時,必須指定編碼表並使用轉換流inputstreamreader isr = new inputstreamreader(new fileinputstream(「a.txt」),」urf-8」);
字元流的緩衝區bufferedreader
特有方法:readline():一次讀一行,把字元資料作為字串返回
例如:bufferedreader bufr = new bufferedreader(new filereader(「buf.txt」));
string line = null;
while((line=bufr.readline())!=null){}
writer中的常見的方法:write(ch):將乙個字元寫入到流中;write(char):將乙個字元陣列寫入到流中。write(string)將乙個字串寫入到流中。flush():重新整理流,將流中的資料重新整理到目的地中,流還存在。close():關閉資源:先關閉前會先呼叫flush,重新整理流中的資料去目的地。然後流關閉。
filewriter://用法
filewriter fw = new filewriter(「demo.txt」);
fw.write(「safsd」);
bufferedwriter:
特有的方法:newline():跨平台的換行符。
建立緩衝區物件必須把流物件作為引數傳遞給緩衝區的建構函式。
bufferedwriter bufw = new bufferedwriter(new filewriter(「buf.txt」));
bufw.write(:absd」);//將資料寫入到了緩衝區
bufw.flush();//對緩衝區的資料進行重新整理。將資料刷到目的地中。
bufw.close();/關閉緩衝區,其實關閉的是被包裝在內部的流物件。
位元組緩衝流 bufferedinputstream 和 bufferedoutputstream
bufferedinputstream為另乙個輸入流新增一些功能,在建立bufferedinputstream時,會建立乙個內部緩衝區陣列。
例如:fileinputstream fis = new fileinputstream(「」);
bufferedinputstream bis = new bufferedinputstream(fis);
dateinputstream dis = new datainputstream(bis);
bufferedoutputstream:該類實現緩衝的輸出流。
例如:fileoutputstream fos = new fileoutputstream(「」);
bufferedoutputstream bos = new bufferedoutputstream(fos);
dateoutputstream dos = new dataoutputstream(bos);
主要的方法:flush():重新整理此緩衝的輸出流;write():將指定的位元組寫入緩衝的輸入流。
列印流printstream:為其他輸入流新增了功能,使它們能夠方便的列印各種資料值表示形式。列印的所有字元都使用平台的預設字元編碼轉換為位元組。在需要寫入字元而不是寫入位元組的情況下,應該使用printwriter類。
//既有自動重新整理,又可執行編碼
printwriter pw = new printwriter(new outputstreamwriter(new fileoutputstream(「a.txt」),」utf-8」),true);//該自動重新整理值為true時,只有三個方法可以用:println,printf,format。
//提高效率並且使用列印方法
printwriter pw = new printwriter(new bufferedwriter(new outputstreamwriter(new fileoutputstream(「a.txt」),」utf-8」)),true);
管道流:pipedinputstream和pipedoutputstream
可以將管道輸出流接到管道輸入流來建立通訊管道,通常兩個流在使用的時候,需要加入多執行緒技術,也就是讓讀寫同時執行。
合併流sequenceinputstream:它從輸入流的有序集合開始,並從第乙個輸入流開始讀取,直到到達檔案末尾,然後再讀取第二個輸入流,直到最後乙個輸入流。
例如:fileinputstream fis1 = new fileinputstream(「res/a.txt」);
fileinputstream fis1 = new fileinputstream(「res/b.txt」);
sequenceinputstream sis = new sequenceinputstream(fis1,fis2);
編碼轉換:
字串—>位元組陣列:編碼。通過getbytes(charset);
位元組陣列à字串:解碼。通過string類的建構函式完成。string(byte,charset);
io流的簡單總結
資料流分為輸入流 inputstream 和輸出流 outputstream inputstream屬於位元組輸入類,system.in 作為位元組輸入流類inputstream 的物件in 實現標準的輸入,其中有read方法從鍵盤接收資料 inputstream的子類fileinputstream...
IO流 簡單總結概述
重新深入的學習了io流,將之前沒搞懂的地方搞懂,這一篇旨在幫助大家理清io流初始的結構體系。什麼是流。流是一組有順序的,有起點和終點的位元組集合,是對資料傳輸的總稱和抽象。即資料在兩個裝置間的傳輸成為流,其本質就是資料傳輸。在根據資料傳輸特性將流抽象為各種類。2.流的分類。根據處理資料型別的不同 字...
IO流 字元流 IO流小結 IO流案例總結
1 字元流 掌握 1 位元組流操作中文資料不是特別的方便,所以就出現了轉換流。轉換流的作用就是把位元組流轉換字元流來使用。2 轉換流其實是乙個字元流 字元流 位元組流 編碼表 3 編碼表 a 就是由字元和對應的數值組成的一張表 b 常見的編碼表 ascii iso 8859 1 gb2312 gbk...