Io流階段大總結
位元組流結構
輸入流:
ObjectInputStream:從文件中讀取對象
FileInputStream:從文件中輸入(讀)位元組
BufferedInputStream:底層有緩衝數組,在不定義數組的情況下,提高輸入(讀)效率
輸出流:
ObjectOutStream:
經一個對象寫入文件
FileOutputStream:
將數據輸出(寫)文件
BufferedOutputStream:
底層有緩衝數組,再不定義數組情況下,提高輸出(寫)效率
字元流結構圖
輸入流:
FileReader:
輸入(讀)文本文件的數據
InputStreamReader:
是從位元組流到字元流的橋樑:它讀取位元組,並使用指定的charset將其解碼為字元.它使用的字符集可以有名
稱指定,也可以被明確指定,或者使用平台的默認字符集
輸出流:
FileWriter:
將數據輸出(寫)到文本文件
BufferedWriter:
底層有緩衝數組,再不定義數組的情況下,提高寫入效率.同時有特有newLine()方法輸出跨平台換行
OutputStreaWriter:
是從字元流到位元組流的橋樑:使用指定的charset將其解碼為位元組,它使用的字符集可以是由名稱指定,
也可以被明確指定,或者可以接受平台默認的字符集
位元組流常用方法
FileInputStream,BufferedInputStream:
-
int read():讀取一個位元組
-
int read(byte[]b):讀取一個位元組數組
-
void close:釋放文件(關流)
FileOutputStream、BufferedOutputStream:
-
void write(int b):寫入一個位元組
-
void write(byte[]b):寫入一個位元組數組
-
void write(byte[]b,int off(開始位置),int len(個數)):寫入一個位元組數組,從off開始,寫入len個
-
void close:釋放文件(關流)
ObjectInputStream:
-
Object readObject():讀取一個對象
-
void close:釋放文件(關流)
ObjectOutputStream:
-
void writeObject(Object obj):寫入一個對象
-
void close:釋放文件(關流)
字元流常用方法
FileReader、BufferedReader、InputStreamReader:
-
int read():一次讀取一個字元
-
int read(char[]char):一次讀取一個字元數組
BufferedReader特有方法:
-
String readLine():讀取一整行
FileWriter、BufferedWriter、OutputStreamWriter:
-
void write():寫入一個字元
-
void write(char[]char):寫入一個字元數組
-
void write(char[]char,int off(開始位置),int len(個數)):寫入一個數組的一部分,開始位置off,寫入個數len
-
void write(String str):寫一個字元串
-
void write(String str,off(開始位置),len(個數)):寫一個字元串一部分,開始位置off,寫入個數len
-
void flush():刷新流
-
void close():釋放文件
BufferedWriter特有方法:
-
void newLine:跨平台通用換行
Properties集合與Io流集合的方法:
-
void load(Reaner reader):將字元輸入流中的數據載入到Properties對象中
-
void store(Writer writer,String comments):將Properties集合中的數據存入字元輸出流
注意事項
-
flush():
刷新流,之後還可以繼續寫數據
-
close():
關閉流,釋放資源,但是關閉之前會先寫出數據.一旦關閉,就不能再寫數據了
-
關流操作應定要放在try-catch-finally中的finally中:
-
被finally控制的語句一定會被執行,不管有沒有異常,也不管異常有沒有被捕獲
-
即使finally中包含continue,break,return,try塊結束後,finally塊也依舊會執行
-
-
使用位元組輸出流注意事項:
-
如果文件不存在就創建
-
寫整數時,實際寫出的是整數對應碼錶的字母
-
使用完必須釋放資源
-
表示文件的路徑名稱必須存在
-
-
使用字元輸出(寫出)流注意事項:
-
創建字元輸出流對象時如果文件不存在就創建,存在就清空
-
寫數據時:
-
寫int就是寫的ASCLL碼錶中對應的位元組
-
寫字元串就是將字元串原樣輸出
-
-
必須釋放資源
-
-
使用字元流(輸入)讀取數據注意事項:
-
文件必須要存在
-
必須釋放資源
-
-
對象操作流注意事項:
-
如果想要這個類能被序列化,那麼這個類必須實現一個介面Serializable
-
Serializable是一個標記介面,實現給介面不需要重寫任何方法
-
靜態成員不加transient關鍵字都會被序列化
-
serialVersionUID 指定序列號,可以避免javabean修改,造成序列號改變運行時候出錯
-
-
數據讀取末尾的輸出標記:
-
字元,位元組讀取到文件結尾會返回-1
-
讀取一整行到文件末尾會返回null
-
讀取對象到末尾會報EOFException
-
-
File[]listFiles()注意點:
-
File指向不存在的,返回null
-
存在的是文件:返回null
-
存在的是文件夾正常輸出,如果是空文件夾,返回長度為0的File數組
-
許可權問題沒有訪問許可權,返回null
注意:返回為null的情況,可以有效避免遍歷返回數組時候出現運行時異常
-