1:集合(本身補齊) Collection(單列集合) List(有序,可重複) ArrayList 底層數據結構是數組,查詢快,增刪慢 線程不安全,效率高 Vector 底層數據結構是數組,查詢快,增刪慢 線程安全,效率低 LinkedList 底層數據結構是鏈表,查詢慢,增刪快 線程不安全,效率高 Set(無序,惟一) HashSet 底層數據結構是哈希表。 哈希表依賴兩個方法:hashCode()和equals() 執行順序: 首先判斷hashCode()值是否相同 是:繼續執行equals(),看其返回值 是true:說明元素重複,不添加 是false:就直接添加到集合 否:就直接添加到集合 最終: 自動生成hashCode()和equals()便可 LinkedHashSet 底層數據結構由鏈表和哈希表組成。 由鏈表保證元素有序。 由哈希表保證元素惟一。 TreeSet 底層數據結構是紅黑樹。(是一種自平衡的二叉樹) 如何保證元素惟一性呢? 根據比較的返回值是不是0來決定 如何保證元素的排序呢? 兩種方式 天然排序(元素具有比較性) 讓元素所屬的類實現Comparable接口 比較器排序(集合具有比較性) 讓集合接收一個Comparator的實現類對象 Map(雙列集合) A:Map集合的數據結構僅僅針對鍵有效,與值無關。 B:存儲的是鍵值對形式的元素,鍵惟一,值可重複。 HashMap 底層數據結構是哈希表。線程不安全,效率高 哈希表依賴兩個方法:hashCode()和equals() 執行順序: 首先判斷hashCode()值是否相同 是:繼續執行equals(),看其返回值 是true:說明元素重複,不添加 是false:就直接添加到集合 否:就直接添加到集合 最終: 自動生成hashCode()和equals()便可 LinkedHashMap 底層數據結構由鏈表和哈希表組成。 由鏈表保證元素有序。 由哈希表保證元素惟一。 Hashtable 底層數據結構是哈希表。線程安全,效率低 哈希表依賴兩個方法:hashCode()和equals() 執行順序: 首先判斷hashCode()值是否相同 是:繼續執行equals(),看其返回值 是true:說明元素重複,不添加 是false:就直接添加到集合 否:就直接添加到集合 最終: 自動生成hashCode()和equals()便可 TreeMap 底層數據結構是紅黑樹。(是一種自平衡的二叉樹) 如何保證元素惟一性呢? 根據比較的返回值是不是0來決定 如何保證元素的排序呢? 兩種方式 天然排序(元素具有比較性) 讓元素所屬的類實現Comparable接口 比較器排序(集合具有比較性) 讓集合接收一個Comparator的實現類對象 2:到底使用那種集合(本身補齊) 看需求。 是不是鍵值對象形式: 是:Map 鍵是否須要排序: 是:TreeMap 否:HashMap 不知道,就使用HashMap。 否:Collection 元素是否惟一: 是:Set 元素是否須要排序: 是:TreeSet 否:HashSet 不知道,就使用HashSet 否:List 要安全嗎: 是:Vector(其實咱們也不用它,後面咱們講解了多線程之後,我在給你回顧用誰) 否:ArrayList或者LinkedList 增刪多:LinkedList 查詢多:ArrayList 不知道,就使用ArrayList 不知道,就使用ArrayList 3:集合的常見方法及遍歷方式 Collection: add() remove() contains() iterator() size() 遍歷: 加強for 迭代器 |--List get() 遍歷: 普通for |--Set Map: put() remove() containskey(),containsValue() keySet() get() value() entrySet() size() 遍歷: 根據鍵找值 根據鍵值對對象分別找鍵和值 做業: 我講解過的任意一個集合,我要求你存儲什麼,你就可以存儲什麼。 而且,還要可以遍歷出來。 4:ArrayList,LinkedList,HashSet,HashMap(掌握) 存儲字符串和自定義對象數據並遍歷 5:集合的嵌套遍歷(理解)
異常處理
html
package cn.itcast_02; /* * A:一個異常 * B:二個異常的處理 * a:每個寫一個try...catch * b:寫一個try,多個catch * try{ * ... * }catch(異常類名 變量名) { * ... * } * catch(異常類名 變量名) { * ... * } * ... * * 注意事項: * 1:能明確的儘可能明確,不要用大的來處理。 * 2:平級關係的異常誰前誰後無所謂,若是出現了子父關係,父必須在後面。 * * 注意: * 一旦try裏面出了問題,就會在這裏把問題給拋出去,而後和catch裏面的問題進行匹配, * 一旦有匹配的,就執行catch裏面的處理,而後結束了try...catch * 繼續執行後面的語句。 */ public class ExceptionDemo2 { public static void main(String[] args) { // method1(); // method2(); // method3(); method4(); } public static void method4() { int a = 10; int b = 0; int[] arr = { 1, 2, 3 }; // 爺爺在最後 try { System.out.println(a / b); System.out.println(arr[3]); System.out.println("這裏出現了一個異常,你不太清楚是誰,該怎麼辦呢?"); } catch (ArithmeticException e) { System.out.println("除數不能爲0"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("你訪問了不應的訪問的索引"); } catch (Exception e) { System.out.println("出問題了"); } // 爺爺在前面是不能夠的 // try { // System.out.println(a / b); // System.out.println(arr[3]); // System.out.println("這裏出現了一個異常,你不太清楚是誰,該怎麼辦呢?"); // } catch (Exception e) { // System.out.println("出問題了"); // } catch (ArithmeticException e) { // System.out.println("除數不能爲0"); // } catch (ArrayIndexOutOfBoundsException e) { // System.out.println("你訪問了不應的訪問的索引"); // } System.out.println("over"); } // 兩個異常的處理 public static void method3() { int a = 10; int b = 0; int[] arr = { 1, 2, 3 }; try { System.out.println(arr[3]); System.out.println(a / b); // System.out.println(arr[3]); } catch (ArithmeticException e) { System.out.println("除數不能爲0"); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("你訪問了不應的訪問的索引"); } System.out.println("over"); } // 兩個異常 public static void method2() { int a = 10; int b = 0; try { System.out.println(a / b); } catch (ArithmeticException e) { System.out.println("除數不能爲0"); } int[] arr = { 1, 2, 3 }; try { System.out.println(arr[3]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("你訪問了不應的訪問的索引"); } System.out.println("over"); } // 一個異常 public static void method1() { // 第一階段 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"); } }
package cn.itcast_02; /* * JDK7出現了一個新的異常處理方案: * try{ * * }catch(異常名1 | 異常名2 | ... 變量 ) { * ... * } * * 注意:這個方法雖然簡潔,可是也不夠好。 * A:處理方式是一致的。(實際開發中,好多時候可能就是針對同類型的問題,給出同一個處理) * B:多個異常間必須是平級關係。 */ public class ExceptionDemo3 { public static void main(String[] args) { method(); } public static void method() { int a = 10; int b = 0; int[] arr = { 1, 2, 3 }; // try { // System.out.println(a / b); // System.out.println(arr[3]); // System.out.println("這裏出現了一個異常,你不太清楚是誰,該怎麼辦呢?"); // } catch (ArithmeticException e) { // System.out.println("除數不能爲0"); // } catch (ArrayIndexOutOfBoundsException e) { // System.out.println("你訪問了不應的訪問的索引"); // } catch (Exception e) { // System.out.println("出問題了"); // } // JDK7的處理方案 try { System.out.println(a / b); System.out.println(arr[3]); } catch (ArithmeticException | ArrayIndexOutOfBoundsException e) { System.out.println("出問題了"); } System.out.println("over"); } }
package cn.itcast_04; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /* * 在try裏面發現問題後,jvm會幫咱們生成一個異常對象,而後把這個對象拋出,和catch裏面的類進行匹配。 * 若是該對象是某個類型的,就會執行該catch裏面的處理信息。 * * 異常中要了解的幾個方法: * public String getMessage():異常的消息字符串 * public String toString():返回異常的簡單信息描述 * 此對象的類的 name(全路徑名) * ": "(冒號和一個空格) * 調用此對象 getLocalizedMessage()方法的結果 (默認返回的是getMessage()的內容) * printStackTrace() 獲取異常類名和異常信息,以及異常出如今程序中的位置。返回值void。把信息輸出在控制檯。 */ public class ExceptionDemo { public static void main(String[] args) { String s = "2014-11-20"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date d = sdf.parse(s); // 建立了一個ParseException對象,而後拋出去,和catch裏面進行匹配 System.out.println(d); } catch (ParseException e) { // ParseException e = new ParseException(); // ParseException // e.printStackTrace(); // getMessage() // System.out.println(e.getMessage()); // Unparseable date: "2014-11-20" // toString() // System.out.println(e.toString()); // java.text.ParseException: Unparseable date: "2014-11-20" e.printStackTrace(); //跳轉到某個指定的頁面(index.html) } System.out.println("over"); } }
throws的方式處理異常
java
package cn.itcast_05; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /* * 有些時候,咱們是能夠對異常進行處理的,可是又有些時候,咱們根本就沒有權限去處理某個異常。 * 或者說,我處理不了,我就不處理了。 * 爲了解決出錯問題,Java針對這種狀況,就提供了另外一種處理方案:拋出。 * * 格式: * throws 異常類名 * 注意:這個格式必須跟在方法的括號後面。 * * 注意: * 儘可能不要在main方法上拋出異常。 * 可是我講課爲了方便我就這樣作了。 * * 小結: * 編譯期異常拋出,未來調用者必須處理。 * 運行期異常拋出,未來調用能夠不用處理。 */ public class ExceptionDemo { public static void main(String[] args) { System.out.println("今每天氣很好"); try { method(); } catch (ParseException e) { e.printStackTrace(); } System.out.println("可是就是不應有霧霾"); method2(); } // 運行期異常的拋出 public static void method2() throws ArithmeticException { int a = 10; int b = 0; System.out.println(a / b); } // 編譯期異常的拋出 // 在方法聲明上拋出,是爲了告訴調用者,你注意了,我有問題。 public static void method() throws ParseException { String s = "2014-11-20"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date d = sdf.parse(s); System.out.println(d); } }
package cn.itcast_06; /* * throw:若是出現了異常狀況,咱們能夠把該異常拋出,這個時候的拋出的應該是異常的對象。 * * throws和throw的區別(面試題) throws 用在方法聲明後面,跟的是異常類名 能夠跟多個異常類名,用逗號隔開 表示拋出異常,由該方法的調用者來處理 throws表示出現異常的一種可能性,並不必定會發生這些異常 throw 用在方法體內,跟的是異常對象名 只能拋出一個異常對象名 表示拋出異常,由方法體內的語句處理 throw則是拋出了異常,執行throw則必定拋出了某種異常 */ public class ExceptionDemo { public static void main(String[] args) { // method(); try { method2(); } catch (Exception e) { e.printStackTrace(); } } public static void method() { int a = 10; int b = 0; if (b == 0) { throw new ArithmeticException(); } else { System.out.println(a / b); } } public static void method2() throws Exception { int a = 10; int b = 0; if (b == 0) { throw new Exception(); } else { System.out.println(a / b); } } }
/* * finally:被finally控制的語句體必定會執行 * 注意:若是在執行到finally以前jvm退出了,就不能執行了。 * * A:格式 * try...catch...finally... * B:用於釋放資源,在IO流操做和數據庫操做中會見到 */
package cn.itcast_07; /* * 面試題: * 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 * 這種作法的目前是爲了釋放資源。 */ public class FinallyDemo2 { public static void main(String[] args) { System.out.println(getInt()); } public static int getInt() { int a = 10; try { System.out.println(a / 0); a = 20; } catch (ArithmeticException e) { a = 30; return a; /* * return a在程序執行到這一步的時候,這裏不是return a而是return 30;這個返回路徑就造成了。 * 可是呢,它發現後面還有finally,因此繼續執行finally的內容,a=40 * 再次回到之前的返回路徑,繼續走return 30; */ } finally { a = 40; return a;//若是這樣結果就是40了。 } // return a; } }
自定義異常的實現和測試
面試
package cn.itcast_08; /* * java不可能對全部的狀況都考慮到,因此,在實際的開發中,咱們可能須要本身定義異常。 * 而咱們本身隨意的寫一個類,是不能做爲異常類來看的,要想你的類是一個異常類,就必須繼承自Exception或者RuntimeException * * 兩種方式: * A:繼承Exception * B:繼承RuntimeException */ public class MyException extends Exception { public MyException() { } public MyException(String message) { super(message); } } // public class MyException extends RuntimeException { // // }
package cn.itcast_08; public class Teacher { public void check(int score) throws MyException { if (score > 100 || score < 0) { throw new MyException("分數必須在0-100之間"); } else { System.out.println("分數沒有問題"); } } // 針對MyException繼承自RuntimeException // public void check(int score) { // if (score > 100 || score < 0) { // throw new MyException(); // } else { // System.out.println("分數沒有問題"); // } // } }
package cn.itcast_08; import java.util.Scanner; /* * 自定義異常測試類 */ public class StudentDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入學生成績:"); int score = sc.nextInt(); Teacher t = new Teacher(); try { t.check(score); } catch (MyException e) { e.printStackTrace(); } } }
異常的注意事項
數據庫
package cn.itcast_09; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /* * 異常注意事項: * A:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞) * B:若是父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常 * C:若是被重寫的方法沒有異常拋出,那麼子類的方法絕對不能夠拋出異常,若是子類方法內有異常發生,那麼子類只能try,不能throws */ public class ExceptionDemo { } class Fu { public void show() throws Exception { } public void method() { } } class Zi extends Fu { @Override public void show() throws ArithmeticException { } @Override public void method() { // String s = "2014-11-20"; // SimpleDateFormat sdf = new SimpleDateFormat(); // Date d = sdf.parse(s); // System.out.println(d); } }
File類的建立功能
數組
package cn.itcast_02; import java.io.File; import java.io.IOException; /* *建立功能: *public boolean createNewFile():建立文件 若是存在這樣的文件,就不建立了 *public boolean mkdir():建立文件夾 若是存在這樣的文件夾,就不建立了 *public boolean mkdirs():建立文件夾,若是父文件夾不存在,會幫你建立出來 * *騎白馬的不必定是王子,多是班長。 *注意:你到底要建立文件仍是文件夾,你最清楚,方法不要調錯了。 */ public class FileDemo { public static void main(String[] args) throws IOException { // 需求:我要在e盤目錄下建立一個文件夾demo File file = new File("e:\\demo"); System.out.println("mkdir:" + file.mkdir()); // 需求:我要在e盤目錄demo下建立一個文件a.txt File file2 = new File("e:\\demo\\a.txt"); System.out.println("createNewFile:" + file2.createNewFile()); // 需求:我要在e盤目錄test下建立一個文件b.txt // Exception in thread "main" java.io.IOException: 系統找不到指定的路徑。 // 注意:要想在某個目錄下建立內容,該目錄首先必須存在。 // File file3 = new File("e:\\test\\b.txt"); // System.out.println("createNewFile:" + file3.createNewFile()); // 需求:我要在e盤目錄test下建立aaa目錄 // File file4 = new File("e:\\test\\aaa"); // System.out.println("mkdir:" + file4.mkdir()); // File file5 = new File("e:\\test"); // File file6 = new File("e:\\test\\aaa"); // System.out.println("mkdir:" + file5.mkdir()); // System.out.println("mkdir:" + file6.mkdir()); // 其實咱們有更簡單的方法 File file7 = new File("e:\\aaa\\bbb\\ccc\\ddd"); System.out.println("mkdirs:" + file7.mkdirs()); // 看下面的這個東西: File file8 = new File("e:\\liuyi\\a.txt"); System.out.println("mkdirs:" + file8.mkdirs()); } }
File類的刪除功能
安全
package cn.itcast_03; import java.io.File; import java.io.IOException; /* * 刪除功能:public boolean delete() * * 注意: * A:若是你建立文件或者文件夾忘了寫盤符路徑,那麼,默認在項目路徑下。 * B:Java中的刪除不走回收站。 * C:要刪除一個文件夾,請注意該文件夾內不能包含文件或者文件夾 */ public class FileDemo { public static void main(String[] args) throws IOException { // 建立文件 // File file = new File("e:\\a.txt"); // System.out.println("createNewFile:" + file.createNewFile()); // 我不當心寫成這個樣子了 File file = new File("a.txt"); System.out.println("createNewFile:" + file.createNewFile()); // 繼續玩幾個 File file2 = new File("aaa\\bbb\\ccc"); System.out.println("mkdirs:" + file2.mkdirs()); // 刪除功能:我要刪除a.txt這個文件 File file3 = new File("a.txt"); System.out.println("delete:" + file3.delete()); // 刪除功能:我要刪除ccc這個文件夾 File file4 = new File("aaa\\bbb\\ccc"); System.out.println("delete:" + file4.delete()); // 刪除功能:我要刪除aaa文件夾 // File file5 = new File("aaa"); // System.out.println("delete:" + file5.delete()); File file6 = new File("aaa\\bbb"); File file7 = new File("aaa"); System.out.println("delete:" + file6.delete()); System.out.println("delete:" + file7.delete()); } }
File類的重命名功能
數據結構
package cn.itcast_04; import java.io.File; /* * 重命名功能:public boolean renameTo(File dest) * 若是路徑名相同,就是更名。 * 若是路徑名不一樣,就是更名並剪切。 * * 路徑以盤符開始:絕對路徑 c:\\a.txt * 路徑不以盤符開始:相對路徑 a.txt */ public class FileDemo { public static void main(String[] args) { // 建立一個文件對象 // File file = new File("林青霞.jpg"); // // 需求:我要修改這個文件的名稱爲"東方不敗.jpg" // File newFile = new File("東方不敗.jpg"); // System.out.println("renameTo:" + file.renameTo(newFile)); File file2 = new File("東方不敗.jpg"); File newFile2 = new File("e:\\林青霞.jpg"); System.out.println("renameTo:" + file2.renameTo(newFile2)); } }
File類的判斷功能
多線程
package cn.itcast_05; import java.io.File; /* * 判斷功能: * public boolean isDirectory():判斷是不是目錄 * public boolean isFile():判斷是不是文件 * public boolean exists():判斷是否存在 * public boolean canRead():判斷是否可讀 * public boolean canWrite():判斷是否可寫 * public boolean isHidden():判斷是否隱藏 */ public class FileDemo { public static void main(String[] args) { // 建立文件對象 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類的獲取功能
jvm
package cn.itcast_06; import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; /* * 獲取功能: * public String getAbsolutePath():獲取絕對路徑 * public String getPath():獲取相對路徑 * public String getName():獲取名稱 * public long length():獲取長度。字節數 * public long lastModified():獲取最後一次的修改時間,毫秒值 */ public class FileDemo { public static void main(String[] args) { // 建立文件對象 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); } }
File類的高級獲取功能
ide
package cn.itcast_07; import java.io.File; /* * 獲取功能: * 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()); } } }
輸出指定目錄下指定後綴名的文件名稱案例
package cn.itcast_08; import java.io.File; /* * 判斷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()); } } } } }
利用過濾器改進
package cn.itcast_08; import java.io.File; import java.io.FilenameFilter; /* * 判斷E盤目錄下是否有後綴名爲.jpg的文件,若是有,就輸出此文件名稱 * A:先獲取全部的,而後遍歷的時候,依次判斷,若是知足條件就輸出。 * B:獲取的時候就已是知足條件的了,而後輸出便可。 * * 要想實現這個效果,就必須學習一個接口:文件名稱過濾器 * public String[] list(FilenameFilter filter) * public File[] listFiles(FilenameFilter filter) */ public class FileDemo2 { public static void main(String[] args) { // 封裝e判斷目錄 File file = new File("e:\\"); // 獲取該目錄下全部文件或者文件夾的String數組 // public String[] list(FilenameFilter filter) String[] strArray = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { // return false; // return true; // 經過這個測試,咱們就知道了,到底把這個文件或者文件夾的名稱加不加到數組中,取決於這裏的返回值是true仍是false // 因此,這個的true或者false應該是咱們經過某種判斷獲得的 // System.out.println(dir + "---" + name); // File file = new File(dir, name); // // System.out.println(file); // boolean flag = file.isFile(); // boolean flag2 = name.endsWith(".jpg"); // return flag && flag2; return new File(dir, name).isFile() && name.endsWith(".jpg"); } }); // 遍歷 for (String s : strArray) { System.out.println(s); } } }
批量修改文件名稱案例
package cn.itcast_09; import java.io.File; /* * 需求:把E:\評書\三國演義下面的視頻名稱修改成 * 00?_介紹.avi * * 思路: * A:封裝目錄 * B:獲取該目錄下全部的文件的File數組 * C:遍歷該File數組,獲得每個File對象 * D:拼接一個新的名稱,而後重命名便可。 */ public class FileDemo { public static void main(String[] args) { // 封裝目錄 File srcFolder = new File("E:\\評書\\三國演義"); // 獲取該目錄下全部的文件的File數組 File[] fileArray = srcFolder.listFiles(); // 遍歷該File數組,獲得每個File對象 for (File file : fileArray) { // System.out.println(file); // E:\評書\三國演義\三國演義_001_[評書網-今天很高興,明天就IO了]_桃園三結義.avi // 改後:E:\評書\三國演義\001_桃園三結義.avi String name = file.getName(); // 三國演義_001_[評書網-今天很高興,明天就IO了]_桃園三結義.avi int index = name.indexOf("_"); String numberString = name.substring(index + 1, index + 4); // 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); // 001_桃園三結義.avi // System.out.println(newName); File newFile = new File(srcFolder, newName); // E:\\評書\\三國演義\\001_桃園三結義.avi // 重命名便可 file.renameTo(newFile); } } }
總結
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:批量修改文件名稱