JAVA的 IO流 詳解

2021-07-22 19:13:47 字數 3172 閱讀 8402

io流,檔案操作類

一、感性認知:

2、沒有可替代方案。

二、理性認知:

1、file類

a、可讀可寫可執行判斷

b、建立檔案

c、建立資料夾

d、批量建立資料夾

e、刪除檔案/資料夾 (也可以指定在虛擬機器退出時刪除)

f、判斷是否為乙個目錄

g、判斷是否為乙個檔案

h、得到檔案的修改時間

i、返回檔案的長度

j、返回當前碟符大小

k、返回當前碟符可分配空間

l、重新命名檔案/資料夾

m、返回當前目錄下的所有檔案/資料夾

n、判斷當前檔案物件路徑是否為絕對路徑

o、判斷兩個file物件封裝的路徑是否為同乙個路徑。

p、建立臨時資料夾createnewtempfile

q、得到乙個file物件所封裝路徑的string或file

r、判斷file物件所封裝的抽象路徑名是否存在 exists()

2、輸入輸出流

a、輸入流

位元組流inputstream[ac]

fileinputstream[c]

filterinputstream[c]

bufferedinputstream[c]

字元流reader[ac]

inputstreamreader[c]

filereader[c]

bufferedreader[c]

b、輸出流

位元組流outputstream[ac]

bytearrayoutputstream[c]

fileoutputstream[c]

filteroutputstream[c]

bufferedoutputstream[c]

printstream[c]

字元流writer[ac]

outputstreamwriter[c]

filewriter[c]

bufferedwriter[c]

1,system.in本質是乙個inputstream

2,system.out本質是乙個printstream

3,printstream

a,print:將資料寫入到輸出流,輸出流將資料寫入到繫結的目標中(控制台,記事本)

c,println:表示將資料輸出到制定和目標後,新增換行符

d,printf:支援格式化資料輸出

4,bytearrayoutputstream

(具體案例,見**:ioutils)

3、檔案的拷貝(見**)

a、輸入流:將待拷貝檔案分批讀取到記憶體中

b、輸入流:將分批讀取到記憶體中的待拷貝檔案的部分資料,一次次寫入到新檔案中。

4、細節討論

a、fileoutputstream.write(readbytes, 0, curlength);

寫入操作,每次寫入的內容為:當前位元組陣列的0偏移量值,此次讀取位元組數的長度。

b、write/flush的細節(flush方法,即為:清空當前「流」中緩衝區資料到指定位置)

輸出流每當緩衝區已滿,會自動執行flush方法,將輸出流中的資料寫入到指 定位置,如果最後一次輸出流緩衝區沒有寫滿,則不會自動執行flush,那麼

需要手動執行flush方法,將流中的緩衝區的資料寫入到指定位置。

可以指定緩衝區的大小,或者可使用預設的大小。大多數情況下,預設值就足夠大了

care:inputstreamreader 是位元組流通向字元流的橋梁:它使用指定的

charset

讀取位元組並將其解碼為字元。它使用的字符集可以由名稱指定或顯式給定,或者可以接受平台預設的字符集

bufferedreader 從字元輸入流中讀取文字,緩衝各個字元,從而實現字元、陣列和行的高效讀取。

fileinputstream 從檔案系統中的某個檔案中獲得輸入位元組。哪些檔案可用取決於主機環境。

fileinputstream 用於讀取諸如影象資料之類的原始位元組流。要讀取字元流,請考慮使用

filereader。

string(byte byte,int start,int length);如果byte陣列指定長度12,但只儲存10個位元組,那麼這裡的length最多為10,這樣一理解超簡單,之前一直不懂。api中是這樣說的通過使用平台的預設字符集解碼指定的 byte 子陣列,構造乙個新的 

string

。新 string

的長度是字符集的函式,因此可能不等於該子陣列的長度。當給定 byte 在給定字符集中無效的情況下,此構造方法的行為沒有指定。如果需要對解碼過程進行更多控制,則應該使用 

charsetdecoder類。

對檔案進行操作:fileinputstream(位元組輸入流),fileoutputstream(位元組輸出流),filereader(字元輸入流),filewriter(字元輸出流)

對管道進行操作:pipedinputstream(位元組輸入流),pipedoutstream(位元組輸出流),pipedreader(字元輸入流),pipedwriter(字元輸出流)

pipedinputstream的乙個例項要和pipedoutputstream的乙個例項共同使用,共同完成管道的讀取寫入操作。主要用於執行緒操作。

位元組/字元陣列:bytearrayinputstream,bytearrayoutputstream,chararrayreader,chararraywriter是在記憶體中開闢了乙個位元組或字元陣列。

buffered緩衝流::bufferedinputstream,bufferedoutputstream,bufferedreader,bufferedwriter,是帶緩衝區的處理流,緩衝區的作用的主要目的是:避免每次和硬碟打交道,提高資料訪問的效率。

因為平時若是我們輸出乙個8個位元組的long型別或4個位元組的float型別,那怎麼辦呢?可以乙個位元組乙個位元組輸出,也可以把轉換成字串輸出,但是這樣轉換費時間,若是直接輸出該多好啊,因此這個資料流就解決了我們輸出資料型別的困難。資料流可以直接輸出float型別或long型別,提高了資料讀寫的效率。

使用物件流需要實現serializable介面,否則會報錯。而若用transient關鍵字修飾成員變數,不寫入該成員變數,若是引用型別的成員變數為null,值型別的成員變數為0.

java的IO流 字元流

reader 是所有的輸入字元流的父類,它是乙個抽象類。reader 中各個類的用途和使用方法基本和inputstream 中的類使用一致。後面會有reader 與inputstream 的對應關係。1 看看幾個常用的實現類 該類從資料來源讀取位元組並將其解碼為使用指定的字符集的字元。inputst...

java的IO流總結

io流即輸入輸出流,流是一組有順序的,有起點和終點的位元組結合,是對資料傳輸的總稱。即資料在兩裝置間的傳輸稱為流,流的本質是資料傳輸。按照資料流的方向可分為 輸入流和輸出流 按照處理資料單位不同可以分為 位元組流和字元流。給出相應的io結構圖 1.io流之fileinputstream和fileou...

Java中的IO流之字元流

看完了位元組流 接下來我們來了解一下字元流 字元流字元流是可以直接讀寫字元的io流,用字元流來讀取字元時,先讀取到位元組資料,然後轉為字元。寫出字元時,需要把字元轉為位元組再寫出。還是上 吧 filereader filereader 類中的 read 方法可以按照字元大小讀取 這樣就把文字中的文字...