day02(3)IO異常的處理,Properties集合

IO異常的處理

jdk1.7之前使用try catch finally 處理流中的異常
格式:

        try{
            可能會產出異常的代碼
        }catch(異常類變量 變量名){
            異常的處理邏輯
        }finally{
            一定會指定的代碼
            資源釋放
        }

jdk1.7之前try...catch處理的完整方法(非常麻煩)

public static void main(String[] args) {
        //提高變量fw的作用域,讓finally可以使用
        //變量在定義的時候,可以沒有值,但是使用的時候必須有值
        //fw = new FileWriter("09_IOAndProperties\\g.txt",true); 執(zhí)行失敗,fw沒有值,fw.close會報錯
        FileWriter fw = null;
        try{
            //可能會產出異常的代碼
            fw = new FileWriter("w:\\09_IOAndProperties\\g.txt",true);
            for (int i = 0; i <10 ; i++) {
                fw.write("HelloWorld"+i+"\r\n");
            }
        }catch(IOException e){
            //異常的處理邏輯
            System.out.println(e);
        }finally {
            //一定會指定的代碼
            //創(chuàng)建對象失敗了,fw的默認值就是null,null是不能調用方法的,會拋出NullPointerException
            //需要增加一個判斷,不是null在把資源釋放
            if(fw!=null){
                try {
                    //fw.close方法聲明拋出了IOException異常對象,所以我們就的處理這個異常對象,要么throws,要么try catch
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
    }

JDK7的新特性
在try的后邊可以增加一個(),在括號中可以定義流對象
那么這個流對象的作用域就在try中有效
try中的代碼執(zhí)行完畢,會自動把流對象釋放,不用寫finally
格式:

    try(定義流對象;定義流對象....){
        可能會產出異常的代碼
    }catch(異常類變量 變量名){
        異常的處理邏輯
    }

使用jdk1.7新特性的try..catch(內容為文件復制)

public static void main(String[] args) {
        try(//1.創(chuàng)建一個字節(jié)輸入流對象,構造方法中綁定要讀取的數(shù)據(jù)源
            FileInputStream fis = new FileInputStream("c:\\1.jpg");
            //2.創(chuàng)建一個字節(jié)輸出流對象,構造方法中綁定要寫入的目的地
            FileOutputStream fos = new FileOutputStream("d:\\1.jpg");){
            //可能會產出異常的代碼
            //一次讀取一個字節(jié)寫入一個字節(jié)的方式
            //3.使用字節(jié)輸入流對象中的方法read讀取文件
            int len = 0;
            while((len = fis.read())!=-1){
                //4.使用字節(jié)輸出流中的方法write,把讀取到的字節(jié)寫入到目的地的文件中
                fos.write(len);
            }
        }catch (IOException e){
            //異常的處理邏輯
            System.out.println(e);
        }
    }

JDK9新特性
try的前邊可以定義流對象
在try后邊的()中可以直接引入流對象的名稱(變量名)
在try代碼執(zhí)行完畢之后,流對象也可以釋放掉,不用寫finally
格式:

        A a = new A();
        B b = new B();
        try(a,b){
            可能會產出異常的代碼
        }catch(異常類變量 變量名){
            異常的處理邏輯
        }
public static void main(String[] args) throws IOException {
        //1.創(chuàng)建一個字節(jié)輸入流對象,構造方法中綁定要讀取的數(shù)據(jù)源
        FileInputStream fis = new FileInputStream("c:\\1.png");
        //2.創(chuàng)建一個字節(jié)輸出流對象,構造方法中綁定要寫入的目的地
        FileOutputStream fos = new FileOutputStream("e:\\1.jpg");

        try(fis;fos){
            //一次讀取一個字節(jié)寫入一個字節(jié)的方式
            //3.使用字節(jié)輸入流對象中的方法read讀取文件
            int len = 0;
            while((len = fis.read())!=-1){
                //4.使用字節(jié)輸出流中的方法write,把讀取到的字節(jié)寫入到目的地的文件中
                fos.write(len);
            }
        }catch (IOException e){
            System.out.println(e);
        }
        //fos.write(1);//Stream Closed
    }

屬性集

java.util.Properties 繼承于 Hashtable ,來表示一個持久的屬性集。它使用鍵值結構存儲數(shù)據(jù),每個鍵及其 對應值都是一個字符串。該類也被許多Java類使用,比如獲取系統(tǒng)屬性時, System.getProperties 方法就是返回 一個 Properties 對

Properties類

java.util.Properties集合 extends Hashtable<k,v> implements Map<k,v>
Properties 類表示了一個持久的屬性集。Properties 可保存在流中或從流中加載。
Properties集合是一個唯一和IO流相結合的集合
可以使用Properties集合中的方法store,把集合中的臨時數(shù)據(jù),持久化寫入到硬盤中存儲
可以使用Properties集合中的方法load,把硬盤中保存的文件(鍵值對),讀取到集合中使用
屬性列表中每個鍵及其對應值都是一個字符串。
Properties集合是一個雙列集合,key和value默認都是字符串

使用Properties集合存儲數(shù)據(jù),遍歷:
使用Properties集合存儲數(shù)據(jù),遍歷取出Properties集合中的數(shù)據(jù)
Properties集合是一個雙列集合,key和value默認都是字符串
Properties集合有一些操作字符串的特有方法:

  • Object setProperty(String key, String value) 調用 Hashtable 的方法 put。
  • String getProperty(String key) 通過key找到value值,此方法相當于Map集合中的get(key)方法
  • Set<String> stringPropertyNames() 返回此屬性列表中的鍵集,其中該鍵及其對應值是字符串,此方法相當于Map集合中的keySet方法
//創(chuàng)建Properties集合對象
        Properties prop = new Properties();
        //使用setProperty往集合中添加數(shù)據(jù)
        prop.setProperty("趙麗穎","168");
        prop.setProperty("迪麗熱巴","165");
        prop.setProperty("古力娜扎","160");
        //prop.put(1,true);

        //使用stringPropertyNames把Properties集合中的鍵取出,存儲到一個Set集合中
        Set<String> set = prop.stringPropertyNames();

        //遍歷Set集合,取出Properties集合的每一個鍵
        for (String key : set) {
            //使用getProperty方法通過key獲取value
            String value = prop.getProperty(key);
            System.out.println(key+"="+value);
        }

可以使用Properties集合中的方法store,把集合中的臨時數(shù)據(jù),持久化寫入到硬盤中存儲

  • void store(OutputStream out, String comments)
  • void store(Writer writer, String comments)
    參數(shù):
    OutputStream out:字節(jié)輸出流,不能寫入中文
    Writer writer:字符輸出流,可以寫中文
    String comments:注釋,用來解釋說明保存的文件是做什么用的
    不能使用中文,會產生亂碼,默認是Unicode編碼
    一般使用""空字符串
    使用步驟:
    1.創(chuàng)建Properties集合對象,添加數(shù)據(jù)
    2.創(chuàng)建字節(jié)輸出流/字符輸出流對象,構造方法中綁定要輸出的目的地
    3.使用Properties集合中的方法store,把集合中的臨時數(shù)據(jù),持久化寫入到硬盤中存儲
    4.釋放資源
        //1.創(chuàng)建Properties集合對象,添加數(shù)據(jù)
        Properties prop = new Properties();
        prop.setProperty("趙麗穎","168");
        prop.setProperty("迪麗熱巴","165");
        prop.setProperty("古力娜扎","160");

        //2.創(chuàng)建字節(jié)輸出流/字符輸出流對象,構造方法中綁定要輸出的目的地
        FileWriter fw = new FileWriter("09_IOAndProperties\\prop.txt");

        //3.使用Properties集合中的方法store,把集合中的臨時數(shù)據(jù),持久化寫入到硬盤中存儲
        prop.store(fw,"save data");

        //4.釋放資源
        fw.close();
        //創(chuàng)建字節(jié)輸出流匿名方法,使用store方法,寫入到硬盤中,因為有中文會亂碼
        //匿名方法會自動釋放
        prop.store(new FileOutputStream("09_IOAndProperties\\prop2.txt"),"");

可以使用Properties集合中的方法load,把硬盤中保存的文件(鍵值對),讀取到集合中使用
void load(InputStream inStream)
void load(Reader reader)
參數(shù):
InputStream inStream:字節(jié)輸入流,不能讀取含有中文的鍵值對
Reader reader:字符輸入流,能讀取含有中文的鍵值對
使用步驟:
1.創(chuàng)建Properties集合對象
2.使用Properties集合對象中的方法load讀取保存鍵值對的文件
3.遍歷Properties集合
注意:
1.存儲鍵值對的文件中,鍵與值默認的連接符號可以使用=,空格(其他符號)
2.存儲鍵值對的文件中,可以使用#進行注釋,被注釋的鍵值對不會再被讀取
3.存儲鍵值對的文件中,鍵與值默認都是字符串,不用再加引號

        //1.創(chuàng)建Properties集合對象
        Properties prop = new Properties();
        //2.使用Properties集合對象中的方法load讀取保存鍵值對的文件
        prop.load(new FileReader("09_IOAndProperties\\prop.txt"));
        //使用字節(jié)流時會有亂碼
        prop.load(new FileInputStream("09_IOAndProperties\\prop.txt"));
        //3.遍歷Properties集合
        Set<String> set = prop.stringPropertyNames();
        for (String key : set) {
            String value = prop.getProperty(key);
            System.out.println(key+"="+value);
        }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容