java回顧之字元流
阿新 • • 發佈:2020-10-22
java回顧之字元流
一、字元流輸入reader
方法 | 說明 |
---|---|
close() | 關閉流資源 |
read() | 讀取一個字元 |
read(char[] chs) | 讀取一個字元陣列的內容 |
1.2、FileReader類
說明 | |
---|---|
FileReader(File file) | 使用File物件的路徑建立輸入流 |
FileReader(String fileName) | 使用字串路徑建立輸入流 |
1.3、字元輸出流Writer
方法 | 說明 |
---|---|
close() | 關閉流資源 |
flush() | 重新整理 |
write(int c) | 寫出一個字元 |
write(char[] cbuf) |
寫出一個字元陣列的內容 |
write(char[] b, int off, int len) | 寫出一個字元陣列的一部分 |
write(String str) |
1.4實現類 FileWriter類
-
說明 FileWriter(File file) 用File物件所表示的路徑建立輸出流物件 FileWriter(String fileName) File字串所表示的路徑建立輸出流物件 FileWriter(File file,boolean b) 用File物件所表示的路徑建立輸出流物件,true表示續寫 FileWriter(String fileName,boolean b) File字串所表示的路徑建立輸出流物件,true表示續寫
常用方法演示:
關閉和重新整理
flush()方法作用是把在緩衝區中的內容重新整理的檔案中,重新整理後可以繼續使用流物件
close()方法作用是關閉流資源,在關閉之前會自動把緩衝區內容重新整理到檔案中
通常寫法就不呼叫flush方法,只要在最後呼叫close就可以了
特殊情況:
比如要做聊天系統,每次說話對方都需要立馬接受,不能最後一起重新整理,所有需要使用flush方法
1.5、位元組流字元流的作用
位元組流能夠操作任意型別,任意型別底層都是位元組,比如圖片,MP3, 視訊
字元流專門用來操作有中文的文字(只有文字才有字元的概念)
二、IO資源的處理
2.1、JDK7前處理 不斷的try。。catch
為什麼要處理異常:
IO流的操作本身就有出錯的概率,這是無法解決的。
以前throws的意思是如果出錯就不管了,這是一個不負責的處理方式
現在使用try..catch的意思是如果出錯了,我們就儘量把損失降到最低,開過流要關掉
例子:
買保險。買完保險之後一個人出事的概率並不會降低
當出事之後損失要降到最低。
2.2、JDK7的處理
格式:
try(建立流物件;建立流物件){ IO流操作 }catch(){ }
不需要程式設計師自己關流了,系統內部實現關流步驟,這種模式可以關好多,比如池子
三、Properties類
3.1、概述
Properties叫做是屬性集。其實他是Hashtable的一個子類,所以Properties也是一個雙列集合。
Properties有和IO流相關的方法。
3.2、構造方法
方法 | 說明 |
---|---|
public Properties() |
方法 | 說明 |
---|---|
Object setProperty(String key ,String value) | 新增鍵值對 |
String getProperty(String key) | 根據鍵獲取值 |
stringPropertyNames() | 獲取所有的鍵 |
load(輸入流) | 把檔案中的鍵值對資料讀到集合中 |
store(輸出流,String comments) |
把資料儲存到檔案中(寫出)
public class Demo03 { public static void main(String[] args) throws IOException { //建立物件 Properties p = new Properties(); //新增鍵值對 p.setProperty("柳巖", "大鵬"); p.setProperty("趙敏", "張無忌"); //store()把集合中的鍵值對儲存到檔案中 p.store(new FileWriter("day16\\aaa\\123.txt"),"...."); } }
把資料載入到集合裡(讀取)
public class Demo04 { public static void main(String[] args) throws IOException { //建立物件 Properties p = new Properties(); System.out.println("讀取前" + p); //把檔案中的資料讀取到集合中 p.load(new FileReader("day16\\aaa\\aaa.properties")); System.out.println("讀取後" + p); } }
這種思想,在開發中很有用,可以實現解耦合,在不修改原始碼的情況下,做出修改數值的操作。
四、
能夠更方便的讀取檔案。Properties的load方法的。
但是使用這個工具類有前提條件:
1.檔案需要是properties型別
2.檔案需要儲存在src路徑下
public class Demo05 { public static void main(String[] args) { // ResourceBundle //獲取物件 //引數表示檔名 ResourceBundle bundle = ResourceBundle.getBundle("aaa"); //根據鍵獲取值 String s = bundle.getString("zhangsan"); System.out.println(s); String s2 = bundle.getString("liuyan"); System.out.println(s2); //System.out.println(bundle); //ResourceBundle沒有特別的好處,就程式碼看起來簡單。但是必須滿足前提條件 } }