天天看點

黑馬程式員 Java基礎知識總結-IO流(應用總結)

java提供的IO流對象很多,有時候甚至不知道去使用哪一個。下面對java的io流對象操作作為總結:

(1)、明确源和目的 

源:輸入流InputStream Reader 

目的:輸出流OutputStream Writer 

(2)、操作的資料是否是純文字 

是:字元流 Reader Writer 

不是:位元組流 InputStream OutputStream 

(3)、當體系明确後,再明确要使用那個具體的對象 

通過裝置來進行區分: 

源裝置:記憶體 硬碟 鍵盤 

目的裝置:記憶體 硬碟 控制台 

例:

需求:将一個文本檔案中資料存儲到另一個檔案中。複制檔案 

源:因為是源,是以使用讀取流。InputStream Reader 

是否是純文字檔案:是,是以使用 Reader。 

接下來明确要使用該體系中的那個對象: 

明确裝置,硬碟,一個檔案。 

 Reader體系中可以操作檔案的是,FileReader。

是否需要提高效率? 

BufferedReader 

目的:因為是目的,是以使用寫入流。OutputStream Writer 

是否是純文字檔案:是,是以使用 Writer。

接下來明确要使用該體系中的那個對象:

明确目的,硬碟,一個檔案。

Writer 體系中可以操作檔案的是,FileWriter。 

是否需要提高效率?需要。BufferedWriter 

需求:将鍵盤錄入的資料儲存到一個檔案中 

這個需求中有源和目的都存在,那麼分别分析 

源:因為是源,是以使用讀取流。InputStream Reader

是否是純文字檔案:是,是以使用 Reader。

接下來明确要使用該體系中的那個對象:

明确裝置,鍵盤。對應的對象是System.in。 

 不是選擇Reader嗎?System.in 對應的不是位元組流嗎? 

為了操作鍵盤的文字資料友善,位元組流可以轉換成字元流,按照字元串操作最友善。

既然明确了Reader 就将 System.in 轉換成Reader

用到了Reader 體系中的轉換流,InputSteamReader

需要提高效率嗎?需要,BufferedReader 

目的:因為是目的,是以使用寫入流。OutputStream Writer 

是否是純文字檔案:是,是以使用 Writer。 

接下來明确要使用該體系中的那個對象: 

明确目的,硬碟,一個檔案。 

Writer 體系中可以操作檔案的是,FileWriter。

是否需要提高效率?需要。BufferedWriter 

擴充

想要把錄入的資料按照指定的編碼表(UTF-8),将資料存到檔案中,使用轉換流,裡面可以指定編碼。 

目的:OutputStream Writer 

是否是純文字?是,Writer 

接下來明确要使用該體系中的那個對象: 

明确目的,硬碟,一個檔案。 

Writer 體系中可以操作檔案的是,FileWriter。 

但是存儲時,需要加入指定的編碼表,而指定的編碼表,隻有轉換流可以指定。

是以要使用的對象是OutputStreamWriter. 

而該轉換流對象要接收一個位元組輸出流。 

而且還可以操作檔案的位元組輸出流,FileOutputStream 

是否需要提高效率?需要。BufferedWriter

是以,記住,轉化暖流什麼時候使用,字元和位元組之間的橋梁,通常,涉及到字元編碼轉換時,需要用到轉換流。 

IO流(改變标準輸入輸出裝置)