File类、递归
?
目錄
一、File類
1.File類的作用
2.File類的構造
3.相對路徑和絕對路徑的概念
4.獲取方法
5.判斷方法
6.創建刪除方法
7.遍歷目錄的方法(*****)
二、遞歸
1.什么是遞歸?
2.目錄搜索案例
3.批量修改文件名案例
4.獲取文件夾大小案例
5.猴子吃桃子問題
6.斐波那契數列
一、File類
1.File類的作用
java.io.File 類是文件和目錄路徑名的抽象表示,主要用于文件和目錄的創建、查找和刪除等操作。
2.File類的構造
public File(String pathname)
public File(String parent, String child)
public File(File parent, String child)
注意:
1. 一個File對象代表硬盤中實際存在的一個文件或者目錄。
2. 無論該路徑下是否存在文件或者目錄,都不影響File對象的創建。
3.相對路徑和絕對路徑的概念
絕對路徑:從盤符開始的路徑,這是一個完整的路徑。
相對路徑:相對于項目目錄的路徑,這是一個便捷的路徑,開發中經常使用。
4.獲取方法
public String getAbsolutePath() :返回此File的絕對路徑名字符串。
public String getPath() :返回此File的路徑名字符串。(只能獲取文件的大小,對于文件夾來說大小是不確定的)
public String getName() :返回由此File表示的文件或目錄的名稱。
public long length() :返回由此File表示的文件的長度。
5.判斷方法
public boolean exists() :此File表示的文件或目錄是否實際存在。
public boolean isDirectory() :此File表示的是否為目錄。
public boolean isFile() :此File表示的是否為文件。
在開發中必須先判斷是否存在,在判斷是否是文件夾或文件
6.創建刪除方法
public boolean createNewFile() :當且僅當具有該名稱的文件尚不存在時,創建一個新的空文件。
public boolean delete() :刪除由此File表示的文件或目錄。(文件夾里面有文件時無法刪除)
public boolean mkdir() :創建由此File表示的目錄。
public boolean mkdirs() :創建由此File表示的目錄,包括任何必需但不存在的父目錄。
7.遍歷目錄的方法(*****)
public String[] list() :返回一個String數組,表示該File目錄中的所有子文件或目錄。
public File[] listFiles() :返回一個File數組,表示該File目錄中的所有的子文件或目錄。
二、遞歸
1.什么是遞歸?
在方法內部調用自己
2.目錄搜索案例
public static void main(String[] args) {File file = new File("F:/黑馬程序員");searchFile(file, "txt"); }public static void searchFile(File file, String name) {//參數非空判斷Objects.requireNonNull(file);Objects.requireNonNull(name);//方式1:匿名內部類/*File[] files = file.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.getName().endsWith("." + name)||pathname.isDirectory();}});*///方式2:Lanbda表達式if (file.exists()) {File[] files = file.listFiles((pathname) -> {return pathname.getName().endsWith("." + name)|| pathname.isDirectory();});//遞歸調用for (File f : files) {if (f.isDirectory()) {searchFile(f, name);} else {//打印文件名System.out.println(f.getName());}}} }3.批量修改文件名案例
File file = new File("F:/黑馬程序員/就業班/day08-File類、遞歸/文件重命名案例"); if(file.exists()){File[] files = file.listFiles();for (File file1 : files) {String filename = file1.getName();int i = filename.indexOf("_");int y = filename.lastIndexOf("_");filename = filename.substring(i + 1, i + 4) +filename.substring(y + 1);System.out.println(file1.renameTo(new File(file, filename)));} }4.獲取文件夾大小案例
描述:從鍵盤接收一個文件夾路徑,獲得該文件夾大小并輸出到控制臺。
public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("請輸入文件夾路徑");String fileName = sc.next();File f = new File(fileName);System.out.println(getFileSize(f));}public static long getFileSize(File file) {long length = 0;Objects.requireNonNull(file);if (file.exists()) {File[] files = file.listFiles();for (File file1 : files) {if (file1.isDirectory()) {length += getFileSize(file1);} else {length += file1.length();}}return length;} else {return 0;}}5.猴子吃桃子問題
描述:猴子吃桃子問題,猴子第一天摘下若干個桃子,當即吃了快一半,還不過癮,又多吃了一個。 第二天又將僅剩下的桃子吃掉了一半,又多吃了一個。以后每天都吃了前一天剩下的一半多一個。 到第十天,只剩下一個桃子。試求第一天共摘了多少桃子? //1534 public static void main(String[] args) {System.out.println(getNum(10));}public static int getNum(int n){if(n==1){return 1;}else{return (getNum(n-1)+1)*2;}}6.斐波那契數列
描述:
用遞歸實現不死神兔
故事得從西元1202年說起,話說有一位意大利青年,名叫斐波那契。
在他的一部著作中提出了一個有趣的問題:假設一只剛出生的小兔一個月后就能長成大兔,
再過一個月(也就是第三個月)就能生下一只小兔,并且此后每個月都生一只小兔,沒有發生死亡,
問:現有一只剛出生的兔子2年后(24個月)會有多少只兔子?
分析:
從第一個兔子開始,第1個月1只兔子,由于長到第三個月后每個月又生一只兔子,所以第2個月也是1只兔子,第3個月時可以生一只兔子,所以總數為2只,這時,其中有一只是以后每個月都可以生一只兔子的老兔子,另一只是一只新兔子,它只有在第三個月的時候才可以每個月生一只兔子;這樣的話,第4個月的兔子總數為3只,…以此類推,從第1個月到第24個月的兔子總數分別為:1,1,2,3,5,8,13,21,34,55,89,144...
public static void main(String[] args) {for (int i = 1; i <= 15; i++) {System.out.println(getNum(i));}}public static int getNum(int month){if(month==1||month==2){return 1;}else{return getNum(month-2)+getNum(month-1);}}?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結