1. 程式人生 > >【java】異常與File

【java】異常與File

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:批量修改檔名稱

package test923;

import java.io.File;

/*
 * 需求:把D:\\圖片\\Twitter的圖片名稱修改為
 *         日期_順序.jpg
 * 
 * 思路:
 *         A:封裝目錄
 *         B:獲取該目錄下所有的檔案的File陣列
 *         C:遍歷該File陣列,得到每一個File物件
 *         D:拼接一個新的名稱,然後重新命名即可。
 */
public class FileTest {

	public static void main(String[] args) {
		// 封裝目錄
		File srcFolder = new File("D:\\圖片\\Twitter");
		
		// 獲取該目錄下所有的檔案的File陣列
		File[] fileArray = srcFolder.listFiles();
		
		 // 遍歷該File陣列,得到每一個File物件
		for (File file : fileArray) {
			// System.out.println(file);
			/**
			 * 修改前
			 *IMG_20180923_1.jpg
			 *IMG_20180923_2.jpg
			 *IMG_20180923_3.jpg
			 */
			String name = file.getName();
			System.out.println(name);
			
			int index = name.indexOf("_");
			String numberString = name.substring(index+5,index+9);
			//System.out.println(numberString);
			
			//int startIndex = name.lastIndexOf("_");
			//int endIndex = name.lastIndexOf(".");
			//String nameString = name.substring(startIndex+1,endIndex);
			//System.out.println(nameString);
			
			int endIndex = name.lastIndexOf("_");
			String nameString = name.substring(endIndex);
			String newName = numberString.concat(nameString);
			//System.out.println(newName);
			
			File newFile = new File(srcFolder,newName);
			
			file.renameTo(newFile);
			/**
			 * 修改後
			 * 0923_1.jpg
			 * 0923_2.jpg
			 * 0923_3.jpg
			 */
		}
		
	}

}