今日內容介紹
一、File
二、遞歸java
xmind:下載地址:編程
連接:https://pan.baidu.com/s/1Eaj9yP5i0x4PiJsZA4StQg 密碼:845awindows
* A:IO技術概述 * a: Output * 把內存中的數據存儲到持久化設備上這個動做稱爲輸出(寫)Output操做 * b: Input * 把持久設備上的數據讀取到內存中的這個動做稱爲輸入(讀)Input操做 * c: IO操做 * 把上面的這種輸入和輸出動做稱爲IO操做
* A:File類的概述和做用 * a: File的概念 * File類是文件和目錄路徑名的抽象表示形式 * Java中把文件或者目錄(文件夾)都封裝成File對象 * 咱們要去操做硬盤上的文件,或者文件夾只要找到File這個類便可
* A:File類靜態的成員變量 * a: pathSeparator * 與系統有關的路徑分隔符,爲了方便,它被表示爲一個字符串 * b: separator * 與系統有關的默認名稱分隔符,爲了方便,它被表示爲一個字符串 * c: 案例代碼 /* * java.io.File * 將操做系統中的,文件,目錄(文件夾),路徑,封裝成File對象 * 提供方法,操做系統中的內容 * File與系統無關的類 * 文件 file * 目錄 directory * 路徑 path */ public class FileDemo { public static void main(String[] args) { //File類靜態成員變量 //與系統有關的路徑分隔符 String separator = File.pathSeparator; System.out.println(separator);// 是一個分號,目錄的分割 (window中環境變量配置各個路徑用分號分割,表示一個完整的路徑結束) Linux中是冒號 : //與系統有關的默認名稱分隔符 separator = File.separator; System.out.println(separator);// 向右 \ 目錄名稱分割 Linux / } }
* A: File類構造方法_1 * a: File(String pathname) * 經過將給定路徑名字符串轉換爲一個File對象,以後可使用File中的方法 * windows中的路徑或文件名不區分大小寫 * d: 案例代碼 public class FileDemo1 { public static void main(String[] args) { function(); } /* * File(String pathname) * 傳遞路徑名: 能夠寫到文件夾,能夠寫到一個文件 * c:\\abc c:\\abc\\Demo.java * 將路徑封裝File類型對象 */ public static void function(){ File file = new File("d:\\eclipse"); System.out.println(file); } }
* A: 相對路徑和絕對路徑 * a: 絕對路徑 * 絕對路徑是一個固定的路徑,從盤符開始 * b: 相對路徑 * 相對路徑相對於某個位置,在eclipse下是指當前項目下 * c: 路徑 絕對路徑 在系統中具備惟一性 c:\\windows\\system32 相對路徑 表示路徑之間的關係 D:\\develop\\Java\\jdk1.7.0_72\\bin D:\\develop\\Java\\jre7 路徑之間關係 Java 父目錄是D:\\develop Java 子目錄是:jdk1.7.0_72 父路徑是 惟一性 子目錄是能夠多個
* A: File類的構造方法_2 * a:File(String parent, String child) * 根據 parent 路徑名字符串和 child 路徑名字符串建立一個新 File 對象 * b: File(File parent, String child) * c: 案例代碼 public class FileDemo1 { public static void main(String[] args) { function_2(); } /* * File(File parent,String child) * 傳遞路徑,傳遞File類型父路徑,字符串子路徑 * 好處: 父路徑是File類型,父路徑能夠直接調用File類方法 */ public static void function_2(){ File parent = new File("d:"); File file = new File(parent,"eclipse"); System.out.println(file); } /* * File(String parent,String child) * 傳遞路徑,傳遞字符串父路徑,字符串子路徑 * 好處: 單獨操做父路徑和子路徑 */ public static void function_1(){ File file = new File("d:","eclipse"); System.out.println(file); } }
* A: File類建立文件功能 * a: public boolean createNewFile() * 建立文件 若是存在這樣的文件,就不建立了 * b: 案例代碼 public class FileDemo2 { public static void main(String[] args)throws IOException { function(); } /* * File建立文件的功能 * boolean createNewFile() * 建立的文件路徑和文件名,在File構造方法中給出 * 文件已經存在了,不在建立 */ public static void function()throws IOException{ File file = new File("c:\\a.txt"); boolean b = file.createNewFile(); System.out.println(b); } }
* A: File類建立目錄功能 * a: 建立目錄 * public boolean mkdir():建立文件夾 若是存在這樣的文件夾,就不建立了 * public boolean mkdirs():建立文件夾,若是父文件夾不存在,會幫你建立出來 * b: 案例代碼 public class FileDemo2 { public static void main(String[] args)throws IOException { function_1(); } /* * File建立文件夾功能 * boolean mkdirs() 建立多層文件夾 * 建立的路徑也在File構造方法中給出 * 文件夾已經存在了,不在建立 */ public static void function_1(){ File file = new File("c:\\abc"); boolean b = file.mkdirs(); System.out.println(b); } }
* A: File類刪除功能 * a: 刪除功能 * public boolean delete():刪除文件或者文件夾 * B: 案例代碼 public class FileDemo2 { public static void main(String[] args)throws IOException { function_2(); } /* * File類的刪除功能 * boolean delete() * 刪除的文件或者是文件夾,在File構造方法中給出 * 刪除成功返回true,刪除失敗返回false * 刪除方法,不走回收站,直接從硬盤中刪除 * 刪除有風險,運行需謹慎 */ public static void function_2(){ File file = new File("c:\\a.txt"); boolean b = file.delete(); System.out.println(b); } }
* A:File類獲取功能 * a: 方法介紹 * String getName(): 返回路徑中表示的文件或者文件夾名 * 獲取路徑中的最後部分的名字 * long length(): 返回路徑中表示的文件的字節數 * String getAbsolutePath(): 獲取絕對路徑,返回String對象 * File getAbsoluteFile() : 獲取絕對路徑,返回File對象 * eclipse環境中,寫一個相對路徑,絕對位置工程根目錄 * String getParent(): 獲取父路徑,返回String對象 * File getParentFile(): 獲取父路徑,返回File對象 * b: 案例代碼 public class FileDemo3 { public static void main(String[] args) { function_3(); } /* * File類的獲取功能 * String getParent() 返回String對象 * File getParentFile()返回File對象 * 獲取父路徑 */ public static void function_3(){ File file = new File("d:\\eclipse\\eclipse.exe"); File parent = file.getParentFile(); System.out.println(parent); } /* * File類獲取功能 * String getAbsolutePath() 返回String對象 * File getAbsoluteFile() 返回File對象 * 獲取絕對路徑 * eclipse環境中,寫的是一個相對路徑,絕對位置工程根目錄 */ public static void function_2(){ File file = new File("src"); File absolute = file.getAbsoluteFile(); System.out.println(absolute); } /* * File類獲取功能 * long length() * 返回路徑中表示的文件的字節數 */ public static void function_1(){ File file = new File("d:\\eclipse\\eclipse.exe"); long length = file.length(); System.out.println(length); } /* * File類的獲取功能 * String getName() * 返回路徑中表示的文件或者文件夾名 * 獲取路徑中的最後部分的名字 */ public static void function(){ File file = new File("d:\\eclipse\\eclipse.exe"); String name = file.getName(); System.out.println(name); /*String path = file.getPath(); System.out.println(path);*/ // System.out.println(file); } }
* A: File類判斷功能 * a: 方法介紹 * boolean exists(): 判斷File構造方法中封裝路徑是否存在 * 存在返回true,不存在返回false * boolean isDirectory(): 判斷File構造方法中封裝的路徑是否是文件夾 * 若是是文件夾,返回true,不是文件返回false * boolean isFile(): 判斷File構造方法中封裝的路徑是否是文件 * 若是是文件,返回true,不是文件返回false * b: 案例代碼 public class FileDemo4 { public static void main(String[] args) { function_1(); } /* * File判斷功能 * boolean isDirectory() * 判斷File構造方法中封裝的路徑是否是文件夾 * 若是是文件夾,返回true,不是文件返回false * * boolean isFile() * 判斷File構造方法中封裝的路徑是否是文件 */ public static void function_1(){ File file = new File("d:\\eclipse\\eclipse.exe"); if(file.exists()){ boolean b = file.isDirectory(); System.out.println(b); } } /* * File判斷功能 * boolean exists() * 判斷File構造方法中封裝路徑是否存在 * 存在返回true,不存在返回false */ public static void function(){ File file = new File("src"); boolean b = file.exists(); System.out.println(b); } }
* A: File類list獲取功能 * a: 方法介紹 * String[] list():獲取到File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄) * 返回只有名字 * File[] listFiles():獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄) * 返回的是目錄或者文件的全路徑 * static File[] listRoots(): 列出可用的文件系統根 * b: 案例代碼 public class FileDemo { public static void main(String[] args) { function_2(); } public static void function_2(){ //獲取系統中的全部根目錄 File[] fileArr = File.listRoots(); for(File f : fileArr){ System.out.println(f); } } /* * File類的獲取功能 * File[] listFiles() * 獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄) * 返回的是目錄或者文件的全路徑 */ public static void function_1(){ File file = new File("d:\\eclipse"); File[] fileArr = file.listFiles(); for(File f : fileArr){ System.out.println(f); } } /* * File類的獲取功能 * String[] list() * 獲取到,File構造方法中封裝的路徑中的文件和文件夾名 (遍歷一個目錄) * 返回只有名字 */ public static void function(){ File file = new File("c:"); String[] strArr = file.list(); System.out.println(strArr.length); for(String str : strArr){ System.out.println(str); } } }
* A: 文件過濾器 * a: 做用 * 過濾一個目錄下的指定擴展名的文件,或者包含某些關鍵字的文件夾 * b: 方法介紹 * public String[] list(FilenameFilter filter) * public File[] listFiles(FileFilter filter) * C: 案例代碼 /* * 自定義過濾器 * 實現FileFilter接口,重寫抽象方法 */ public class MyFilter implements FileFilter{ public boolean accept(File pathname) { /* * pathname 接受到的也是文件的全路徑 * c:\\demo\\1.txt * 對路徑進行判斷,若是是java文件,返回true,不是java文件,返回false * 文件的後綴結尾是.java */ //String name = pathname.getName(); return pathname.getName().endsWith(".java"); } } /* * File類的獲取,文件獲取過濾器 * 遍歷目錄的時候,能夠根據須要,只獲取知足條件的文件 * 遍歷目錄方法 listFiles()重載形式 * listFiles(FileFilter filter)接口類型 * 傳遞FileFilter接口的實現類 * 自定義FileFilter接口實現類,重寫抽象方法, * 接口實現類對象傳遞到遍歷方法listFiles */ public class FileDemo1 { public static void main(String[] args) { File file = new File("c:\\demo"); File[] fileArr = file.listFiles(new MyFilter()); for(File f : fileArr){ System.out.println(f); } } }
* A:文件過濾器_原理分析 * listFiles()遍歷目錄的同時,獲取到了文件名全路徑,調用過濾器的方法accept, * 將獲取到的路徑傳遞給accept方法的參數pathname * accept方法接收了參數pathname,參數是listFiles傳遞來的 * 在accept方法中,進行判斷,若是這個路徑是Java文件,返回true,走着返回false * 一旦方法返回了true * listFiles將路徑保存到File數組中
* A: 遞歸遍歷全目錄 * a: 案例代碼 /* * 對一個目錄的下的全部內容,進行徹底的遍歷 * 編程技巧,方法的遞歸調用,本身調用本身 */ public class FileDemo { public static void main(String[] args) { File dir = new File("d:\\eclipse"); getAllDir(dir); } /* * 定義方法,實現目錄的全遍歷 */ public static void getAllDir(File dir){ System.out.println(dir); //調用方法listFiles()對目錄,dir進行遍歷 File[] fileArr = dir.listFiles(); for(File f : fileArr){ //判斷變量f表示的路徑是否是文件夾 if(f.isDirectory()){ //是一個目錄,就要去遍歷這個目錄 //本方法,getAllDir,就是給個目錄去遍歷 //繼續調用getAllDir,傳遞他目錄 getAllDir(f); }else{ System.out.println(f); } } } }
* A:遞歸概念和注意事項 * a: 遞歸概念 * 遞歸,指在當前方法內調用本身的這種現象 * 遞歸分爲兩種,直接遞歸和間接遞歸 * 直接遞歸稱爲方法自身調用本身。間接遞歸能夠A方法調用B方法,B方法調用C方法,C方法調用A方法 * b: 注意事項 * 遞歸必定要有出口, 必須可讓程序停下 * 遞歸次數不能過多 * 構造方法,禁止遞歸
* A: 遞歸求和計算 * a: 題目分析 * 1+2+3+...+(n-1)+n:求1到n的和 * 總結規律:1到n的和等於1到(n-1)的和再加n * getSum(n-1)+ n * 遞歸出口:getSum(1) return 1; * b: 案例代碼 /* * 方法的遞歸調用 * 方法本身調用本身 * 適合於,方法中運算的主體不變,可是運行的時候,參與運行的方法參數會變化 * 注意: * 遞歸必定要有出口, 必須可讓程序停下 * 遞歸次數不能過多 * 構造方法,禁止遞歸 */ public class DiGuiDemo { public static void main(String[] args) { int sum = getSum(3); System.out.println(sum); } /* * 計算 1+2+3+100和 = 5050 * 計算規律: * n+(n-1)+(n-2) * 100+(100-1)+(99-1)+...1 */ public static int getSum(int n){ if( n == 1) return 1; return n + getSum(n-1); } }
* A: 遞歸求和計算 * a: 題目分析 * 5!=5*4*3*2*1 * =5*4! * 4!=4*3! * 3!=3*2! * 2!=2*1! * 1!=1 * n!=n*(n-1)! * 遞歸出口:n*getJieCheng(n-1): getJieCheng(1) return 1; * b: 案例代碼 /* * 方法的遞歸調用 * 方法本身調用本身 * 適合於,方法中運算的主體不變,可是運行的時候,參與運行的方法參數會變化 * 注意: * 遞歸必定要有出口, 必須可讓程序停下 * 遞歸次數不能過多 * 構造方法,禁止遞歸 */ public class DiGuiDemo { public static void main(String[] args) { System.out.println(getJieCheng(5)); } /* * 計算階乘 5! * 5*4*3*2*1 */ public static int getJieCheng(int n){ if ( n == 1) return 1; return n * getJieCheng(n-1); } }
* A: 遞歸計算斐波那契數列 * a:題目分析 * 1 1 2 3 5 8 13 21 * 從第三項開始,後面的每一項都等於前面兩項的和,第一項和第二項的值爲1,做爲程序的出口 * b: 案例代碼 /* * 方法的遞歸調用 * 方法本身調用本身 * 適合於,方法中運算的主體不變,可是運行的時候,參與運行的方法參數會變化 * 注意: * 遞歸必定要有出口, 必須可讓程序停下 * 遞歸次數不能過多 * 構造方法,禁止遞歸 */ public class DiGuiDemo { public static void main(String[] args) { System.out.println(getFBNQ(12)); } /* * 方法遞歸,計算斐波那契數列 * */ public static int getFBNQ(int month){ if( month == 1) return 1; if( month == 2) return 1; return getFBNQ(month-1)+getFBNQ(month-2); } }
* A: 遍歷目錄下的全部java文件 * a: 案例代碼 public class MyJavaFilter implements FileFilter { public boolean accept(File pathname) { //判斷獲取的是目錄,直接返回true if(pathname.isDirectory()) return true; return pathname.getName().toLowerCase().endsWith(".java"); } } /* * 遍歷目錄,獲取目錄下的全部.java文件 * 遍歷多級目錄,方法遞歸實現 * 遍歷的過程當中,使用過濾器 */ public class FileDemo1 { public static void main(String[] args) { getAllJava(new File("c:\\demo")); // new File("c:\\demo").delete(); } /* * 定義方法,實現遍歷指定目錄 * 獲取目錄中全部的.java文件 */ public static void getAllJava(File dir){ //調用File對象方法listFiles()獲取,加入過濾器 File[] fileArr = dir.listFiles(new MyJavaFilter()); for(File f : fileArr){ //對f路徑,判斷是否是文件夾 if(f.isDirectory()){ //遞歸進入文件夾遍歷 getAllJava(f); }else{ System.out.println(f); } } }
1.使用文件名稱過濾器篩選將指定文件夾下的小於200K的小文件獲取並打印。數組
2.從鍵盤接收一個文件夾路徑,統計該文件夾大小。eclipse
3.從鍵盤接收一個文件夾路徑,刪除該文件夾。學習
4.從鍵盤接收一個文件夾路徑,把文件夾中的全部文件以及文件夾的名字按層級打印測試
例如: aaa是文件夾,裏面有bbb.txt,ccc.txt,ddd.txt這些文件,有eee這樣的文件夾,eee中有fff.txt和ggg.txt,打印出層級來 aaa bbb.txt ccc.txt ddd.txt eee fff.txt ggg.txt
5.鍵盤錄入一個文件夾路徑,統計該文件夾(包含子文件夾)中每種類型的文件及個數,注意:用文件類型(後綴名,不包含.(點),如:"java","txt")做爲key,ui
用個數做爲value,放入到map集合中,並用兩種方式遍歷map集合 例如: doc 的類型的文件有 3 個 java 的類型的文件有 5 個 txt 的類型的文件有 7 個
若是想進一步的交流,能夠加入咱們的QQ羣,裏面有最新的學習資料,能夠學習。操作系統