1. IO流小程序
1)根據方向分爲:數組
輸入流和輸出流。方向的定了是基於咱們的程序的。流向咱們程序的流叫作:輸入流;從程序向外流的叫作:輸出流緩存
2)流根據源頭分爲: 服務器
基本流(節點流):從特定的地方讀寫的流類,如磁盤或一塊內存區域。即有來源。 app
處理流(高級流、過濾流):沒有數據來源,不能獨立存在,它的存在是用於處理基本流的。是使用一個已經存在的輸入流或輸出流鏈接建立的。ide
3)流根據處理的數據單位不一樣劃分爲:編碼
字節流:以一個「字節」爲單位,以Stream結尾spa
字符流:以一個「字符」爲單位,以Reader/Writer結尾3d
2. 基本字節流FileInputStream和FileOutputStream
code
用於讀寫文件的字節流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:
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:
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:
案例25:
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:
是另外一種緩衝「字符」輸出流,以「行」爲單位,經常使用它做輸出,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: