Java核心API -- 11(IO流)

 
1. IO流

    1)根據方向分爲:

        輸入流和輸出流。方向的定了是基於我們的程序的。流向我們程序的流叫做:輸入流;從程序向外流的叫做:輸出流

    2)流根據源頭分爲: 

        基本流(節點流):從特定的地方讀寫的流類,如磁盤或一塊內存區域。即有來源。 

        處理流(高級流、過濾流):沒有數據來源,不能獨立存在,它的存在是用於處理基本流的。是使用一個已經存在的輸入流或輸出流連接創建的。

    3)流根據處理的數據單位不同劃分爲:

        字節流:以一個“字節”爲單位,以Stream結尾

        字符流:以一個“字符”爲單位,以Reader/Writer結尾

 

2. 基本字節流FileInputStream和FileOutputStream

    用於讀寫文件的字節流FIS/FOS(基本流)

    1)FileInputStream:文件字節輸入流

        FileInputStream 常用構造方法:

        ① FileInputStream(File file):通過打開一個到實際文件的連接來創建一個FileInputStream,該文件通過文件系統中的File對象file指定。即向file文件中寫入數據。

        ② FileInputStream(String filePath):通過打開一個到實際文件的連接來創建一個FileInputStream,該文件通過文件系統中的文件路徑名指定。也可直接寫當前項目下文件名。

        常用方法:

        ① int read(int d):讀取int值的低8位。

        ② int read(byte[] b):將b數組中所有字節讀出,返回讀取的字節個數。

        ③ int read(byte[] b,int offset,int length):將b數組中offset位置開始讀出length個字節。

        ④ available()方法:返回當前字節輸入流 可讀取的總字節數。

    2)FileOutputStream:文件字節輸出流

        FileOutputStream常用構造方法: 

        ① FileOutputStream(File File):創建一個向指定File對象表示的文件中寫入數據的文件輸出流。會重寫以前的內容,向file文件中寫入數據時,若該文件不存在,則會自動創建該文件。

        ② FileOubputStream(File file,boolean append):append爲true則對當前文件末尾進行寫操作(追加,但不重寫以前的)。

        ③ FileOubputStream(String filePath):創建一個向具有指定名稱的文件中寫入數據的文件輸出流。前提路徑存在,寫當前目錄下的文件名或者全路徑。

        ④ FileOubputStream(String filePath,boolean append):append爲true則對當前文件末尾進行寫操作(追加,但不重寫以前的)。

        常用方法:

        ① void write(int d):寫入int值的低8位。

        ② void write(byte[] d):將d數組中所有字節寫入。

        ③ void write(byte[] d,int offset,int length):將d數組中offset位置開始寫入length個字節。


    案例22:

        wKiom1WfdMOz-L7OAAHX5eiCxhE006.jpg


 

3. 緩衝字節流BufferedInputStream和BufferedOutputStream 

    1)BufferedInputStream:緩衝字節輸入流,構造器需要傳入基本字節輸入流BufferedInputStream(InputStream in) 

        常用方法:

            ① int read():從輸入流中讀取一個字節。

            ② int read(byte[] b,int offset,int length):從此字節輸入流中給定偏移量offset處開始將各字節讀取到指定的 byte 數組中。

    2)BufferedOutputStream:緩衝字節輸出流,構造器需要傳入基本字節輸出流BufferedOutputStream(OutputStream out)

        常用方法:

            ① void write(int d):將指定的字節寫入此緩衝的輸出流。

            ② void write(byte[] d,int offset,int length):將指定 byte數組中從偏移量 offset開始的 length個字節寫入此緩衝的輸出流。

            ③ void flush():將緩衝區中的數據一次性寫出,“清空”緩衝區。

    3)緩衝流內部維護着一個緩衝區,每次都儘可能的讀取更多的字節放入到緩衝區,再將緩衝區中的內容部分或全部返回給用戶,因此可以提高讀寫效率。

    4)有緩衝效果的流,一般爲寫入操作的流,在數據都寫完後一定要flush,flush的作用是將緩衝區中未寫出的數據一次性寫出:bos.flush();即不論緩存區有多少數據,先寫過去,緩衝區再下班~確保所有字符都寫出

    5)使用JDK的話,通常情況下,我們只需要關閉最外層的流。


    案例23:

        wKioL1Wfdt-BiHl1AAJVM06R27E399.jpg


 

4. 轉換流InputStreamReader和OutputStreanWriter

    以“單個字符”爲單位讀寫數據,一次處理一個字符(unicode)。 字符流底層還是基於字節形式讀寫的,所以都是將字節流轉成字符流。在字符輸入輸出流階段,進行編碼修改與設置。 

    所有字符流都是高級流。

    1)InputStreamReader:字符輸入流。

        A.常用構造方法:

            InputStreamReader(InputStream in):創建一個字符集的輸入流。

            InputStreamReader(InputStream in, String charsetName):創建一個使用指定字符集的輸入流。

        B.常用方法:

            ① int read():讀取單個字符。

            ② int read(char cs[], int offset, int length):讀入字符數組中從offset開始的length長度的字符。

            ③ void close():關閉流。

 

    2)OutputStreamWriter:字符輸出流

        A.常用構造方法:

            OutputStreamWriter(OutputStream out):創建一個字符集的輸出流。

            OutputStreamWriter(OutputStream out, String charset):創建一個使用指定字符集的輸出流。

        B.常用方法:

            ① void write(int c):寫入單個字符。

            ② void write(char c[], int off, int len):寫入從字符數組off開頭到len長度的部分

            ③ void write(String str, int off, int len):寫入從字符串off開頭到len長度的部分。

            ④ void flush():將緩衝區中的數據一次性寫出,“清空”緩衝區。

            ⑤ void close():關閉流。

 
5. 緩衝字符流BufferedReader和BufferedWriter

    可以以“行”爲單位讀寫“字符”,高級流。 在字符輸入輸出流修改編碼。 

    1)BufferedReader:緩衝字符輸入流,以行爲單位讀字符

        A.常用構造方法:

            BufferedReader(Reader in):創建一個使用默認大小的緩衝字符輸入流。

            BufferedReader(Reader in, int size):創建一個使用指定大小的緩衝字符輸入流。

        B.常用方法:

            ① int read():讀取單個字符。如果已到達流末尾,則返回-1。

            ② int read(char cbuf[], int off, int len):從字符數組中讀取從off開始的len長度的字符。返回讀取的字符數,如果已到達流末尾,則返回-1。

            ③ String readLine():讀取一個文本行。通過下列字符之一即可認爲某行已終止:換行 ('\n')、回車 ('\r') 或回車後直接跟着換行。如果已到達流末尾,則返回 null。EOF:end of file文件末尾。

            ④ void close():關閉流。


    案例24:

        wKioL1WfeC6zBVPxAAIOR_Ts5J8198.jpg


    案例25:

        wKioL1WffLmDoMHFAAKdUdMKpXc250.jpg    


     2)BufferedWriter:緩衝字符輸出流,以行爲單位寫字符

        A.常用構造方法:

            BufferedWriter(Writer out):創建一個使用默認大小的緩衝字符輸出流。

            BufferedWriter(Writer out, int size):創建一個使用給定大小的緩衝字符輸出流。

        B.常用方法:

            ① void write(int c):寫入單個字符。

            ② void write(char[] c,int off,int len):寫入字符數組從off開始的len長度的字符。

            ③ void write(String s,int off,int len):寫入字符串中從off開始的len長度的字符。

            ④ void newLine():寫入一個行分隔符。

            ⑤ flush():將緩衝區中的數據一次性寫出,“清空”緩衝區。

            ⑥ close():關閉流。


     案例26:

        wKiom1WfeAORiYwXAAKpFQpMl2A917.jpg


 6. PrintWriter輸出流

    是另一種緩衝“字符”輸出流,以“行”爲單位,常用它作輸出,BufferedWriter用的少。

    1)Servlet:運行在服務器端的小程序,給客戶端發送相應使用的輸出流就是PrintWriter。

    2)寫方法:println(String data):帶換行符輸出一個字符串,不用手動換行了。

    3)構造方式: 

        PrintWriter(File file):以行爲單位向文件寫數據

        PrintWriter(OutputStream out):以行爲單位向字節輸出流寫數據

        PrintWriter(Writer writer):以行爲單位向字符輸出流寫數據

        PrintWriter(String fileName):以行爲單位向指定路徑的文件寫數據

    4)常用方法

        使用上和BufferedWriter一樣,只是使用println()會自動換行。


    案例27:

        wKioL1Wfe2KyuJEjAAJSXo_qRXc158.jpg


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章