1. 程式人生 > 實用技巧 >java回顧之字元流

java回顧之字元流

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流相關的方法。

Properties鍵值對都儲存字串,所以這個集合不寫泛型。

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);
    }
}

 這種思想,在開發中很有用,可以實現解耦合,在不修改原始碼的情況下,做出修改數值的操作。

四、ResourceBundle工具類

能夠更方便的讀取檔案。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沒有特別的好處,就程式碼看起來簡單。但是必須滿足前提條件
    }
}