1. 程式人生 > >Java 第九天 筆記

Java 第九天 筆記

1   File類詳解

(1)建構函式 

     File f = new File("檔案路徑")

    File f = new File("parent","child")

2建立一個資料夾

      //在工作空間目錄下建立a.txt的資料夾 File f = new File("a"); f.mkdir();

     在G:\路徑下建立一個a.txt的資料夾.如果已經有的話這不會重新建立

     File f = new File("G:\\a"); f.mkdir();

    如果路徑寫成\\a.txt,會在碟符下建立新的資料夾 File f = new File("\\a"); f.mkdir();

     在g盤下建立資料夾a,a 下建立一個b資料夾 File f = new File("G:\\a\\b"); f.mkdirs();

    //注意mkdirs(),建立多個資料夾

(3)new File 的區別:

   File f = new File("a");//此時f是資料夾 File f = new File("parent","child");

  //此時f是檔案,parent資料夾下的檔案 注意:此時會在碟符根   目錄下建立資料夾 或檔案 d File f = new File("", "d");     f.createNewFile(); // f.mkdir()

4,list()方法與listFiles()方法區別:

f.list(); 返回String[]陣列.裡面包含了f一級目錄下的檔案和資料夾名.

   注意: 如果f:\\a\\b.那麼b不會包含在陣列中 f.listFiles() 返回File[]陣列.裡面包含了f一級目錄下的檔案和資料夾.

   注意: 如果f:\\a\\b.那麼b不會包含在陣列中

5,檔名過濾器 FilenameFilte

  • File[] fs = f1.listFiles(new FileFilter() {
  • /** * pathname 表示要被過濾的檔案,注意:不是檔名 * 返ture 證明是符合條件的檔案 */ @Override public boolean accept(File pathname)
  • { if (pathname.length() > 1024 * 1024 * 20) { return true; } return false; } });}

5  

檔案一些常用方法:

<span style="color:#000000"><code>        f.<span style="color:#4f4f4f">delete</span>(); <span style="color:#880000"> //刪除file</span>
        f.exists(); <span style="color:#880000"> //file是否存在</span>
        f.getName();<span style="color:#880000"> //得到file名字</span>
        f.isDirectory(); <span style="color:#880000"> //file是否是資料夾</span>
        f.isFile();   <span style="color:#880000"> //file是否是檔案</span>
        f.<span style="color:#4f4f4f">length</span>();  <span style="color:#880000"> //file的長度</span></code></span>

6   Java提供了更加優秀的解決辦法:異常處理機制。

異常處理機制能讓程式在異常發生時,按照程式碼的預先設定的異常處理邏輯,針對性地處理異常,讓程式盡最大可能恢復正常並繼續執行,且保持程式碼的清晰。
Java中的異常可以是函式中的語句執行時引發的,也可以是程式設計師通過throw 語句手動丟擲的,只要在Java程式中產生了異常,就會用一個對應型別的異常物件來封裝異常,JRE就會試圖尋找異常處理程式來處理異常。

Throwable類是Java異常型別的頂層父類,一個物件只有是 Throwable 類的(直接或者間接)例項,他才是一個異常物件,才能被異常處理機制識別。JDK中內建了一些常用的異常類,我們也可以自定義異常。

7  Java異常的分類和類結構圖

Java標準庫內建了一些通用的異常,這些類以Throwable為頂層父類。

Throwable又派生出Error類和Exception類。

錯誤:Error類以及他的子類的例項,代表了JVM本身的錯誤。錯誤不能被程式設計師通過程式碼處理,Error很少出現。因此,程式設計師應該關注Exception為父類的分支下的各種異常類。

異常:Exception以及他的子類,代表程式執行時傳送的各種不期望發生的事件。可以被Java異常處理機制使用,是異常處理的核心。858860-20170911125844719-1230755033

總體上我們根據Javac對異常的處理要求,將異常類分為2類。

非檢查異常(unckecked exception):Error 和 RuntimeException 以及他們的子類。javac在編譯時,不會提示和發現這樣的異常,不要求在程式處理這些異常。所以如果願意,我們可以編寫程式碼處理(使用try…catch…finally)這樣的異常,也可以不處理。對於這些異常,我們應該修正程式碼,而不是去通過異常處理器處理 。這樣的異常發生的原因多半是程式碼寫的有問題。如除0錯誤ArithmeticException,錯誤的強制型別轉換錯誤ClassCastException,陣列索引越界ArrayIndexOutOfBoundsException,使用了空物件NullPointerException等等。

檢查異常(checked exception):除了Error 和 RuntimeException的其它異常。javac強制要求程式設計師為這樣的異常做預備處理工作(使用try…catch…finally或者throws)。在方法中要麼用try-catch語句捕獲它並處理,要麼用throws子句宣告丟擲它,否則編譯不會通過。這樣的異常一般是由程式的執行環境導致的。因為程式可能被執行在各種未知的環境下,而程式設計師無法干預使用者如何使用他編寫的程式,於是程式設計師就應該為這樣的異常時刻準備著。如SQLException , IOException,ClassNotFoundException 等。

需要明確的是:檢查和非檢查是對於javac來說的,這樣就很好理解和區分了。

   8   異常的概念

    Java異常是Java提供的用於處理程式中錯誤的一種機制,採用面向物件的方法處理異常。處理過程:

丟擲異常:在執行一個方法時,如果發生異常,則這個方法生成程式碼標該異常的一個物件,停止當前執行路徑,並把異常物件提交給JRE。

   捕獲異常:JRE得到該異常,尋找相應的程式碼來處理該異常,JRE在方法的呼叫棧中查詢,湊夠生成異常的方法開始回溯,直到找到相應的異常處理程式碼為止。

   9  異常分類

       所有異常類物件都派生於Throwable類的一個例項。如果內建的異常不能夠滿足需要,還可以建立自己的異常類。

     unchecked 異常(一般在執行時不通過) 和checked異常 (一般在編譯時 不通過)

10  異常處理模式

    try {

         語句。。。

    }catch(Exception e){ 

          語句。。。

     }finally{ 

          語句。。。。

   }

  11 try 語句指定一段程式碼,該程式碼就是一次捕獲並處理的範圍。在執行過程中當任意一條語句產生異常時,就會跳過該段後面的程式碼。程式碼中可能會產生丟擲一種或者幾種異常物件,它後面的catch語句分別對這些異常做相應的處理(當異常處理程式碼,結束以後不會回到try語句去執行尚未執行的程式碼)一個try至少含有一個catch或者finally 

 12 catch 語句塊可以伴隨一個或者多個catch語句塊。用於處理可能產生的不同型別的異常。常用方法:toString方法。顯示異常的類名和產生異常的原因。getmessage()只顯示產生異常的原因,但是不顯示類名。

  13   異常處理模組內含有return 語句  執行順序  1  執行try catch 給返回值 2 執行finally 3  執行return。(finally 語句裡面一般不含有return語句 否則會覆蓋try裡面的語句)。

 14  異常處理第二種方法:宣告throws子句 當CHecked Exception產生時,不一定立刻處理它。可以再把它通過Throws丟擲去。如果一個方法丟擲多個已檢查異常,就必須在方法首部列出所有異常,之間使用逗號隔開。

15 方法重寫中的宣告異常原則

子類宣告的異常不能超出父類宣告的範圍:(1)父類沒有宣告異常,子類也不能(2)不可能丟擲原有方法丟擲異常類的父類或者上層類(3) 丟擲的異常型別的數目不可以比原來的方法丟擲的還多(不是隻個數,而是指型別)。

16 手動丟擲異常  throw new FileNotFoundException("..........");package testDate;
import java.io.File;
import java.io.FileNotFoundException;
public class TestReadFile {
    public static void main(String[] args) {
        File f=new File("d:/b.txt");
        if(!f.exists()){
            try{
                //手動丟擲異常
                throw new FileNotFoundException("File can't be found !");
            }catch(FileNotFoundException e){
                e.printStackTrace();
            }
        }
    }
}

使用異常處理機制建議:要避免使用異常處理代替錯誤處理,這樣會降低程式的清晰性,並且效率低下。

處理異常不可以代替簡單的測試,只在異常情況下使用異常機制。不要進行小粒度的異常處理,應該應該將整個任務包含在一個try語句塊內。異常往往在高層處理。