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流(改變标準輸入輸出裝置)