IO流

lo流

input output

異常:exception
程序的異常:分兩種,一種是編譯期間運行,二是運行期間的問題。

編譯期間的問題:Java程序必須進行處理不然不能通過編譯。

運行期間的問題:
是可以編譯處理的,也可以和編譯時異常一樣處理。


我們通過兩種方式來處理異常:
A:try….Catch….finally

        try{
        //可能出現的問題代碼
            }catch(異常名  變量){

                }finally{
                    //釋放資源
                }

注意:try裏面的代碼越少越好。
catch要有內容,不然就是隱藏問題。

B:throws

案列演示:

// 第一階段
    int a = 10;
    // int b = 2;
    int b = 0;

    try {
        System.out.println(a / b);
    } catch (ArithmeticException ae) {
        System.out.println("除數不能爲0");
    }

    // 第二階段
    System.out.println("over");

throws方法的處理:拋出一個異常。我們沒有能力的時候是拋出異常。

格式:必須跟在方法後面。

throw異常:
在方法內部出現某種情況,程序不能繼續運行,需要進行跳轉,就把throw拋出。
注意:throw拋出的是對象,不是類名。


throws和throw的區別(面試題)

throws
    用在方法聲明後面,跟的是異常類名
    可以跟多個異常類名,用逗號隔開
    表示拋出異常,由該方法的調用者來處理
    throws表示出現異常的一種可能性,並不一定會發生這些異常
throw
    用在方法體內,跟的是異常對象名
    只能拋出一個異常對象名
    表示拋出異常,由方法體內的語句處理
    throw則是拋出了異常,執行throw則一定拋出了某種異常

面試題:

1:final,finally和finalize的區別
 * final:最終的意思,可以修飾類,成員變量,成員方法
 *      修飾類,類不能被繼承
 *      修飾變量,變量是常量
 *      修飾方法,方法不能被重寫
 * finally:是異常處理的一部分,用於釋放資源。
 *      一般來說,代碼肯定會執行,特殊情況:在執行到finally之前jvm退出了
 * finalize:是Object類的一個方法,用於垃圾回收

面試二

2:如果catch裏面有return語句,請問finally裏面的代碼還會執行嗎?
如果會,請問是在return前,還是return後。
會。前。

 準確的說,應該是在中間。

 * 3:try...catch...finally的格式變形
 *      A:try...catch...finally
 *      B:try...catch
 *      C:try...catch...catch...
 *      D:try...catch...catch...finally
 *      E:try...finally

 *          這種做法的目前是爲了釋放資源

面試題:
a爲什麼輸出的是30?不是40?

    getIn();
    System.out.println(getIn());
}

private static int getIn() {
    // TODO Auto-generated method stub

    int a=10;
    try{
        System.out.println(a/0);
        a=20;
    }catch(ArithmeticException e){
        a=30;
        return a;

    }finally{
        a=40;
    }
    return a;

}

File


創建功能:

 *public boolean createNewFile():創建文件 如果存在這樣的文件,就不創建了
 *public boolean mkdir():創建文件夾 如果存在這樣的文件夾,就不創建了
 *public boolean mkdirs():創建文件夾,如果父文件夾不存在,會幫你創建出來

File file =new File("E:\\demo");
    System.out.println(file.mkdir());
    File file1=new File("E:\\demo\\yan55.txt");
    System.out.println(file);
    System.out.println(file1.createNewFile());
    File file2=new File("E:\\gg\\hh\\jj\\kk\\ll");
    System.out.println(file2.mkdirs());

file的刪除功能:

delete();
注意:要刪除一個文件夾,裏面不能包含文件夾。


file的重命名功能:
renameto();
File file=new Filew(“張三.txt”)
File file1=new Filew(“張三.txt”)
systeam.out.pritln(file.renameto(file1));


File 的判斷功能


    public boolean isDirectory():判斷是否是目錄
 * public boolean isFile():判斷是否是文件
 * public boolean exists():判斷是否存在
 * public boolean canRead():判斷是否可讀
 * public boolean canWrite():判斷是否可寫
 * public boolean isHidden():判斷是否隱藏

File file = new File(“a.txt”);

    System.out.println("isDirectory:" + file.isDirectory());// false
    System.out.println("isFile:" + file.isFile());// true
    System.out.println("exists:" + file.exists());// true
    System.out.println("canRead:" + file.canRead());// true
    System.out.println("canWrite:" + file.canWrite());// true
    System.out.println("isHidden:" + file.isHidden());// false

File的獲取功能


獲取功能:
* public String getAbsolutePath():獲取絕對路徑
* public String getPath():獲取相對路徑
* public String getName():獲取名稱
* public long length():獲取長度。字節數
* public long lastModified():獲取最後一次的修改時間,毫秒值

案列:
// 創建文件對象
File file = new File(“demo\test.txt”);

    System.out.println("getAbsolutePath:" + file.getAbsolutePath());
    System.out.println("getPath:" + file.getPath());
    System.out.println("getName:" + file.getName());
    System.out.println("length:" + file.length());
    System.out.println("lastModified:" + file.lastModified());

    // 1416471971031
    Date d = new Date(1416471971031L);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String s = sdf.format(d);
    System.out.println(s);

獲取功能(有點重要):
 * public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數組
 * public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數組
 */
public class FileDemo {
    public static void main(String[] args) {
        // 指定一個目錄
        File file = new File("e:\\");

        // public String[] list():獲取指定目錄下的所有文件或者文件夾的名稱數組
        String[] strArray = file.list();
        for (String s : strArray) {
            System.out.println(s);
        }
        System.out.println("------------");

        // public File[] listFiles():獲取指定目錄下的所有文件或者文件夾的File數組
        File[] fileArray = file.listFiles();
        for (File f : fileArray) {
            System.out.println(f.getName());
        }
    }

案列(重要):

判斷E盤目錄下是否有後綴名爲.jpg的文件,如果有,就輸出此文件名稱
 * 
 * 分析:
 *      A:封裝e判斷目錄
 *      B:獲取該目錄下所有文件或者文件夾的File數組
 *      C:遍歷該File數組,得到每一個File對象,然後判斷
 *      D:是否是文件
 *          是:繼續判斷是否以.jpg結尾
 *              是:就輸出該文件名稱
 *              否:不搭理它
 *          否:不搭理它
 */
public class FileDemo {
    public static void main(String[] args) {
        // 封裝e判斷目錄
        File file = new File("e:\\");

        // 獲取該目錄下所有文件或者文件夾的File數組
        File[] fileArray = file.listFiles();

        // 遍歷該File數組,得到每一個File對象,然後判斷
        for (File f : fileArray) {
            // 是否是文件
            if (f.isFile()) {
                // 繼續判斷是否以.jpg結尾
                if (f.getName().endsWith(".jpg")) {
                    // 就輸出該文件名稱
                    System.out.println(f.getName());
                }
            }
        }
    }
}

總結:


1:異常(理解)

(1)程序出現的不正常的情況。
(2)異常的體系
    Throwable
        |--Error    嚴重問題,我們不處理。
        |--Exception
            |--RuntimeException 運行期異常,我們需要修正代碼
            |--非RuntimeException 編譯期異常,必須處理的,否則程序編譯不通過
(3)異常的處理:
    A:JVM的默認處理
        把異常的名稱,原因,位置等信息輸出在控制檯,但是呢程序不能繼續執行了。
    B:自己處理
        a:try...catch...finally
            自己編寫處理代碼,後面的程序可以繼續執行
        b:throws
            把自己處理不了的,在方法上聲明,告訴調用者,這裏有問題

(4)面試題

    A:編譯期異常和運行期異常的區別?
        編譯期異常 必須要處理的,否則編譯不通過
        運行期異常 可以不處理,也可以處理
    B:throw和throws是的區別
        throw:
            在方法體中,後面跟的是異常對象名,並且只能是一個
            throw拋出的是一個異常對象,說明這裏肯定有一個異常產生了
        throws:
            在方法聲明上,後面跟的是異常的類名,可以是多個
            throws是聲明方法有異常,是一種可能性,這個異常並不一定會產生

(5)finally關鍵字及其面試題

    A:finally用於釋放資源,它的代碼永遠會執行。特殊情況:在執行到finally之前jvm退出了
    B:面試題
        a:final,finally,finalize的區別?
        b:如果在catch裏面有return,請問finally還執行嗎?如果執行,在return前還是後
            會,前。

            實際上在中間。這個上課我們講過
    C:異常處理的變形
        try...catch...finally
        try...catch...
        try...catch...catch...
        try...catch...catch...fianlly
        try...finally
(6)自定義異常
    繼承自Exception或者RuntimeException,只需要提供無參構造和一個帶參構造即可

(7)異常的注意實現
    A:父的方法有異常拋出,子的重寫方法在拋出異常的時候必須要小於等於父的異常 
    B:父的方法沒有異常拋出,子的重寫方法不能有異常拋出
    C:父的方法拋出多個異常,子的重寫方法必須比父少或者小

2:File(掌握)

(1)IO流操作中大部分都是對文件的操作,所以Java就提供了File類供我們來操作文件
(2)構造方法
    A:File file = new File("e:\\demo\\a.txt");
    B:File file = new File("e:\\demo","a.txt");
    C:File file = new File("e:\\demo");
      File file2 = new File(file,"a.txt");
(3)File類的功能(自己補齊)
    A:創建功能
    B:刪除功能
    C:重命名功能
    D:判斷功能
    E:獲取功能
    F:高級獲取功能
    G:過濾器功能
(4)案例:
    A:輸出指定目錄下指定後綴名的文件名稱
        a:先獲取所有的,在遍歷的時候判斷,再輸出
        b:先判斷,再獲取,最後直接遍歷輸出即可
    B:批量修改文件名稱
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章