22_IO_第22天(File、递归)_讲义
生活随笔
收集整理的這篇文章主要介紹了
22_IO_第22天(File、递归)_讲义
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今日內(nèi)容介紹
1、File
2、遞歸
xmind:下載地址:
鏈接:https://pan.baidu.com/s/1Eaj9yP5i0x4PiJsZA4StQg 密碼:845a
01IO技術(shù)概述
* A:IO技術(shù)概述* a: Output* 把內(nèi)存中的數(shù)據(jù)存儲(chǔ)到持久化設(shè)備上這個(gè)動(dòng)作稱為輸出(寫)Output操作* b: Input* 把持久設(shè)備上的數(shù)據(jù)讀取到內(nèi)存中的這個(gè)動(dòng)作稱為輸入(讀)Input操作* c: IO操作* 把上面的這種輸入和輸出動(dòng)作稱為IO操作02File類的概述和作用
* A:File類的概述和作用* a: File的概念* File類是文件和目錄路徑名的抽象表示形式* Java中把文件或者目錄(文件夾)都封裝成File對(duì)象* 我們要去操作硬盤上的文件,或者文件夾只要找到File這個(gè)類即可03File類靜態(tài)的成員變量
* A:File類靜態(tài)的成員變量* a: pathSeparator* 與系統(tǒng)有關(guān)的路徑分隔符,為了方便,它被表示為一個(gè)字符串* b: separator* 與系統(tǒng)有關(guān)的默認(rèn)名稱分隔符,為了方便,它被表示為一個(gè)字符串* c: 案例代碼/** java.io.File* 將操作系統(tǒng)中的,文件,目錄(文件夾),路徑,封裝成File對(duì)象* 提供方法,操作系統(tǒng)中的內(nèi)容* File與系統(tǒng)無關(guān)的類* 文件 file* 目錄 directory* 路徑 path*/public class FileDemo {public static void main(String[] args) {//File類靜態(tài)成員變量//與系統(tǒng)有關(guān)的路徑分隔符String separator = File.pathSeparator;System.out.println(separator);// 是一個(gè)分號(hào),目錄的分割(window中環(huán)境變量配置各個(gè)路徑用分號(hào)分割,表示一個(gè)完整的路徑結(jié)束) Linux中是冒號(hào) ://與系統(tǒng)有關(guān)的默認(rèn)名稱分隔符separator = File.separator;System.out.println(separator);// 向右 \ 目錄名稱分割 Linux / }}04File類構(gòu)造方法_1
* A: File類構(gòu)造方法_1* a: File(String pathname)* 通過將給定路徑名字符串轉(zhuǎn)換為一個(gè)File對(duì)象,之后可以使用File中的方法* windows中的路徑或文件名不區(qū)分大小寫* d: 案例代碼public class FileDemo1 {public static void main(String[] args) {function();}/** File(String pathname)* 傳遞路徑名: 可以寫到文件夾,可以寫到一個(gè)文件* c:\\abc c:\\abc\\Demo.java* 將路徑封裝File類型對(duì)象*/public static void function(){File file = new File("d:\\eclipse");System.out.println(file);}}05相對(duì)路徑和絕對(duì)路徑
* A: 相對(duì)路徑和絕對(duì)路徑* a: 絕對(duì)路徑* 絕對(duì)路徑是一個(gè)固定的路徑,從盤符開始* b: 相對(duì)路徑* 相對(duì)路徑相對(duì)于某個(gè)位置,在eclipse下是指當(dāng)前項(xiàng)目下 * c: 路徑絕對(duì)路徑在系統(tǒng)中具有唯一性c:\\windows\\system32相對(duì)路徑表示路徑之間的關(guān)系D:\\develop\\Java\\jdk1.7.0_72\\binD:\\develop\\Java\\jre7路徑之間關(guān)系Java 父目錄是D:\\developJava 子目錄是:jdk1.7.0_72父路徑是 唯一性子目錄是可以多個(gè)06File類的構(gòu)造方法_2
* A: File類的構(gòu)造方法_2* a:File(String parent, String child) * 根據(jù) parent 路徑名字符串和 child 路徑名字符串創(chuàng)建一個(gè)新 File 對(duì)象* 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類型,父路徑可以直接調(diào)用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)* 傳遞路徑,傳遞字符串父路徑,字符串子路徑* 好處: 單獨(dú)操作父路徑和子路徑*/public static void function_1(){File file = new File("d:","eclipse");System.out.println(file);}}07File類創(chuàng)建文件功能
* A: File類創(chuàng)建文件功能* a: public boolean createNewFile()* 創(chuàng)建文件 如果存在這樣的文件,就不創(chuàng)建了* b: 案例代碼public class FileDemo2 {public static void main(String[] args)throws IOException {function();} /** File創(chuàng)建文件的功能* boolean createNewFile()* 創(chuàng)建的文件路徑和文件名,在File構(gòu)造方法中給出* 文件已經(jīng)存在了,不在創(chuàng)建*/public static void function()throws IOException{File file = new File("c:\\a.txt");boolean b = file.createNewFile();System.out.println(b);}}08File類創(chuàng)建目錄功能
* A: File類創(chuàng)建目錄功能* a: 創(chuàng)建目錄* public boolean mkdir():創(chuàng)建文件夾 如果存在這樣的文件夾,就不創(chuàng)建了* public boolean mkdirs():創(chuàng)建文件夾,如果父文件夾不存在,會(huì)幫你創(chuàng)建出來* b: 案例代碼public class FileDemo2 {public static void main(String[] args)throws IOException {function_1();}/** File創(chuàng)建文件夾功能* boolean mkdirs() 創(chuàng)建多層文件夾* 創(chuàng)建的路徑也在File構(gòu)造方法中給出* 文件夾已經(jīng)存在了,不在創(chuàng)建*/public static void function_1(){File file = new File("c:\\abc");boolean b = file.mkdirs();System.out.println(b);} }09File類刪除功能
* A: File類刪除功能* a: 刪除功能* public boolean delete():刪除文件或者文件夾 * B: 案例代碼public class FileDemo2 {public static void main(String[] args)throws IOException {function_2();}/** File類的刪除功能* boolean delete()* 刪除的文件或者是文件夾,在File構(gòu)造方法中給出* 刪除成功返回true,刪除失敗返回false* 刪除方法,不走回收站,直接從硬盤中刪除* 刪除有風(fēng)險(xiǎn),運(yùn)行需謹(jǐn)慎*/public static void function_2(){File file = new File("c:\\a.txt");boolean b = file.delete();System.out.println(b);} }10File類獲取功能
* A:File類獲取功能* a: 方法介紹* String getName(): 返回路徑中表示的文件或者文件夾名* 獲取路徑中的最后部分的名字* long length(): 返回路徑中表示的文件的字節(jié)數(shù)* String getAbsolutePath(): 獲取絕對(duì)路徑,返回String對(duì)象* File getAbsoluteFile() : 獲取絕對(duì)路徑,返回File對(duì)象* eclipse環(huán)境中,寫一個(gè)相對(duì)路徑,絕對(duì)位置工程根目錄* String getParent(): 獲取父路徑,返回String對(duì)象* File getParentFile(): 獲取父路徑,返回File對(duì)象* b: 案例代碼public class FileDemo3 {public static void main(String[] args) {function_3();}/** File類的獲取功能* String getParent() 返回String對(duì)象* File getParentFile()返回File對(duì)象* 獲取父路徑*/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對(duì)象* File getAbsoluteFile() 返回File對(duì)象* 獲取絕對(duì)路徑* eclipse環(huán)境中,寫的是一個(gè)相對(duì)路徑,絕對(duì)位置工程根目錄*/public static void function_2(){File file = new File("src");File absolute = file.getAbsoluteFile();System.out.println(absolute);}/** File類獲取功能* long length()* 返回路徑中表示的文件的字節(jié)數(shù)*/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);}}11File類判斷功能
* A: File類判斷功能* a: 方法介紹* boolean exists(): 判斷File構(gòu)造方法中封裝路徑是否存在* 存在返回true,不存在返回false* boolean isDirectory(): 判斷File構(gòu)造方法中封裝的路徑是不是文件夾* 如果是文件夾,返回true,不是文件返回false* boolean isFile(): 判斷File構(gòu)造方法中封裝的路徑是不是文件* 如果是文件,返回true,不是文件返回false* b: 案例代碼public class FileDemo4 {public static void main(String[] args) {function_1();}/** File判斷功能* boolean isDirectory()* 判斷File構(gòu)造方法中封裝的路徑是不是文件夾* 如果是文件夾,返回true,不是文件返回false* * boolean isFile()* 判斷File構(gòu)造方法中封裝的路徑是不是文件*/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構(gòu)造方法中封裝路徑是否存在* 存在返回true,不存在返回false*/public static void function(){File file = new File("src");boolean b = file.exists();System.out.println(b);}}12File類list獲取功能
* A: File類list獲取功能* a: 方法介紹* String[] list():獲取到File構(gòu)造方法中封裝的路徑中的文件和文件夾名 (遍歷一個(gè)目錄)* 返回只有名字* File[] listFiles():獲取到,File構(gòu)造方法中封裝的路徑中的文件和文件夾名 (遍歷一個(gè)目錄)* 返回的是目錄或者文件的全路徑* static File[] listRoots(): 列出可用的文件系統(tǒng)根 * b: 案例代碼public class FileDemo {public static void main(String[] args) {function_2();}public static void function_2(){//獲取系統(tǒng)中的所有根目錄File[] fileArr = File.listRoots();for(File f : fileArr){System.out.println(f);}}/** File類的獲取功能* File[] listFiles()* 獲取到,File構(gòu)造方法中封裝的路徑中的文件和文件夾名 (遍歷一個(gè)目錄)* 返回的是目錄或者文件的全路徑*/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構(gòu)造方法中封裝的路徑中的文件和文件夾名 (遍歷一個(gè)目錄)* 返回只有名字*/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);}}}13文件過濾器
* A: 文件過濾器* a: 作用* 過濾一個(gè)目錄下的指定擴(kuò)展名的文件,或者包含某些關(guān)鍵字的文件夾* b: 方法介紹* public String[] list(FilenameFilter filter)* public File[] listFiles(FileFilter filter)* C: 案例代碼 /** 自定義過濾器* 實(shí)現(xiàn)FileFilter接口,重寫抽象方法*/public class MyFilter implements FileFilter{public boolean accept(File pathname) {/** pathname 接受到的也是文件的全路徑* c:\\demo\\1.txt* 對(duì)路徑進(jìn)行判斷,如果是java文件,返回true,不是java文件,返回false* 文件的后綴結(jié)尾是.java*///String name = pathname.getName();return pathname.getName().endsWith(".java");}}/** File類的獲取,文件獲取過濾器* 遍歷目錄的時(shí)候,可以根據(jù)需要,只獲取滿足條件的文件* 遍歷目錄方法 listFiles()重載形式* listFiles(FileFilter filter)接口類型* 傳遞FileFilter接口的實(shí)現(xiàn)類* 自定義FileFilter接口實(shí)現(xiàn)類,重寫抽象方法,* 接口實(shí)現(xiàn)類對(duì)象傳遞到遍歷方法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);}}}14文件過濾器_原理分析
* A:文件過濾器_原理分析* listFiles()遍歷目錄的同時(shí),獲取到了文件名全路徑,調(diào)用過濾器的方法accept,* 將獲取到的路徑傳遞給accept方法的參數(shù)pathname* accept方法接收了參數(shù)pathname,參數(shù)是listFiles傳遞來的* 在accept方法中,進(jìn)行判斷,如果這個(gè)路徑是Java文件,返回true,走著返回false* 一旦方法返回了true* listFiles將路徑保存到File數(shù)組中15遞歸遍歷全目錄
* A: 遞歸遍歷全目錄* a: 案例代碼/** 對(duì)一個(gè)目錄的下的所有內(nèi)容,進(jìn)行完全的遍歷* 編程技巧,方法的遞歸調(diào)用,自己調(diào)用自己*/public class FileDemo {public static void main(String[] args) {File dir = new File("d:\\eclipse");getAllDir(dir);}/** 定義方法,實(shí)現(xiàn)目錄的全遍歷*/public static void getAllDir(File dir){System.out.println(dir);//調(diào)用方法listFiles()對(duì)目錄,dir進(jìn)行遍歷File[] fileArr = dir.listFiles();for(File f : fileArr){//判斷變量f表示的路徑是不是文件夾if(f.isDirectory()){//是一個(gè)目錄,就要去遍歷這個(gè)目錄//本方法,getAllDir,就是給個(gè)目錄去遍歷//繼續(xù)調(diào)用getAllDir,傳遞他目錄getAllDir(f);}else{System.out.println(f);}}}}16遞歸概念和注意事項(xiàng)
* A:遞歸概念和注意事項(xiàng)* a: 遞歸概念* 遞歸,指在當(dāng)前方法內(nèi)調(diào)用自己的這種現(xiàn)象* 遞歸分為兩種,直接遞歸和間接遞歸* 直接遞歸稱為方法自身調(diào)用自己。間接遞歸可以A方法調(diào)用B方法,B方法調(diào)用C方法,C方法調(diào)用A方法* b: 注意事項(xiàng)* 遞歸一定要有出口, 必須可以讓程序停下* 遞歸次數(shù)不能過多* 構(gòu)造方法,禁止遞歸17遞歸求和計(jì)算
* A: 遞歸求和計(jì)算* a: 題目分析* 1+2+3+...+(n-1)+n:求1到n的和* 總結(jié)規(guī)律:1到n的和等于1到(n-1)的和再加n* getSum(n-1)+ n* 遞歸出口:getSum(1) return 1;* b: 案例代碼 /** 方法的遞歸調(diào)用* 方法自己調(diào)用自己* 適合于,方法中運(yùn)算的主體不變,但是運(yùn)行的時(shí)候,參與運(yùn)行的方法參數(shù)會(huì)變化* 注意:* 遞歸一定要有出口, 必須可以讓程序停下* 遞歸次數(shù)不能過多* 構(gòu)造方法,禁止遞歸*/public class DiGuiDemo {public static void main(String[] args) {int sum = getSum(3);System.out.println(sum);}/** 計(jì)算 1+2+3+100和 = 5050* 計(jì)算規(guī)律:* 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);}}18遞歸求階乘
* A: 遞歸求和計(jì)算* 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: 案例代碼/** 方法的遞歸調(diào)用* 方法自己調(diào)用自己* 適合于,方法中運(yùn)算的主體不變,但是運(yùn)行的時(shí)候,參與運(yùn)行的方法參數(shù)會(huì)變化* 注意:* 遞歸一定要有出口, 必須可以讓程序停下* 遞歸次數(shù)不能過多* 構(gòu)造方法,禁止遞歸*/public class DiGuiDemo {public static void main(String[] args) { System.out.println(getJieCheng(5));}/* * 計(jì)算階乘 5!* 5*4*3*2*1*/public static int getJieCheng(int n){if ( n == 1)return 1;return n * getJieCheng(n-1);} }19遞歸計(jì)算斐波那契數(shù)列
* A: 遞歸計(jì)算斐波那契數(shù)列* a:題目分析* 1 1 2 3 5 8 13 21* 從第三項(xiàng)開始,后面的每一項(xiàng)都等于前面兩項(xiàng)的和,第一項(xiàng)和第二項(xiàng)的值為1,作為程序的出口* b: 案例代碼/** 方法的遞歸調(diào)用* 方法自己調(diào)用自己* 適合于,方法中運(yùn)算的主體不變,但是運(yùn)行的時(shí)候,參與運(yùn)行的方法參數(shù)會(huì)變化* 注意:* 遞歸一定要有出口, 必須可以讓程序停下* 遞歸次數(shù)不能過多* 構(gòu)造方法,禁止遞歸*/public class DiGuiDemo {public static void main(String[] args) { System.out.println(getFBNQ(12));}/** 方法遞歸,計(jì)算斐波那契數(shù)列* */public static int getFBNQ(int month){if( month == 1)return 1;if( month == 2)return 1;return getFBNQ(month-1)+getFBNQ(month-2);}}20遍歷目錄下的所有java文件
* A: 遍歷目錄下的所有java文件* a: 案例代碼public class MyJavaFilter implements FileFilter {public boolean accept(File pathname) {//判斷獲取的是目錄,直接返回trueif(pathname.isDirectory())return true;return pathname.getName().toLowerCase().endsWith(".java");}}/** 遍歷目錄,獲取目錄下的所有.java文件* 遍歷多級(jí)目錄,方法遞歸實(shí)現(xiàn)* 遍歷的過程中,使用過濾器*/public class FileDemo1 {public static void main(String[] args) {getAllJava(new File("c:\\demo"));// new File("c:\\demo").delete();}/** 定義方法,實(shí)現(xiàn)遍歷指定目錄* 獲取目錄中所有的.java文件*/public static void getAllJava(File dir){//調(diào)用File對(duì)象方法listFiles()獲取,加入過濾器File[] fileArr = dir.listFiles(new MyJavaFilter());for(File f : fileArr){//對(duì)f路徑,判斷是不是文件夾if(f.isDirectory()){//遞歸進(jìn)入文件夾遍歷getAllJava(f);}else{System.out.println(f);}}}作業(yè)測(cè)試
1.使用文件名稱過濾器篩選將指定文件夾下的小于200K的小文件獲取并打印。
2.從鍵盤接收一個(gè)文件夾路徑,統(tǒng)計(jì)該文件夾大小。
3.從鍵盤接收一個(gè)文件夾路徑,刪除該文件夾。
4.從鍵盤接收一個(gè)文件夾路徑,把文件夾中的所有文件以及文件夾的名字按層級(jí)打印
例如: aaa是文件夾,里面有bbb.txt,ccc.txt,ddd.txt這些文件,有eee這樣的文件夾,eee中有fff.txt和ggg.txt,打印出層級(jí)來 aaabbb.txtccc.txtddd.txt eeefff.txtggg.txt5.鍵盤錄入一個(gè)文件夾路徑,統(tǒng)計(jì)該文件夾(包含子文件夾)中每種類型的文件及個(gè)數(shù),注意:用文件類型(后綴名,不包含.(點(diǎn)),如:"java","txt")作為key,
用個(gè)數(shù)作為value,放入到map集合中,并用兩種方式遍歷map集合 例如: doc 的類型的文件有 3 個(gè) java 的類型的文件有 5 個(gè) txt 的類型的文件有 7 個(gè)如果想進(jìn)一步的交流,可以加入我們的QQ群,里面有最新的學(xué)習(xí)資料,可以學(xué)習(xí)。
轉(zhuǎn)載于:https://www.cnblogs.com/wanghui1234/p/9567288.html
總結(jié)
以上是生活随笔為你收集整理的22_IO_第22天(File、递归)_讲义的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Hadoop Mapreduce 调优
- 下一篇: Scrapy突破反爬虫的限制