1.1File類概述和構(gòu)造方法
-
File類介紹
- 它是文件和目錄路徑名的抽象表示
- 文件和目錄是可以通過File封裝成對象的
- 對于File而言,其封裝的并不是一個真正存在的文件,僅僅是一個路徑名而已.它可以是存在的,也可以是不存在的.將來可以通過具體的操作把這個路徑的內(nèi)容轉(zhuǎn)換為具體存在的慎皱。
-
File類的構(gòu)造方法
方法名 說明 File(String pathname) 通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實例 File(String parent, String child) 從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實例 File(File parent, String child) 從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實例 -
示例代碼
public class FileDemo01 { public static void main(String[] args) { //File(String pathname): 通過將給定的路徑名字符串轉(zhuǎn)換為抽象路徑名來創(chuàng)建新的 File實例 File f1 = new File("E:\\itcast\\java.txt"); System.out.println(f1); //File(String parent, String child): 從父路徑名字符串和子路徑名字符串創(chuàng)建新的 File實例 File f2 = new File("E:\\itcast","java.txt"); System.out.println(f2); //File(File parent, String child): 從父抽象路徑名和子路徑名字符串創(chuàng)建新的 File實例 File f3 = new File("E:\\itcast"); File f4 = new File(f3,"java.txt"); System.out.println(f4); } }
1.2絕對路徑和相對路徑
-
絕對路徑
是一個完整的路徑,從盤符開始
-
相對路徑
是一個簡化的路徑,相對當(dāng)前項目下的路徑
-
示例代碼
public class FileDemo02 { public static void main(String[] args) { // 是一個完整的路徑,從盤符開始 File file1 = new File("D:\\itheima\\a.txt"); // 是一個簡化的路徑,從當(dāng)前項目根目錄開始 File file2 = new File("a.txt"); File file3 = new File("模塊名\\a.txt"); } }
1.3File類創(chuàng)建功能
-
方法分類
方法名 說明 public boolean createNewFile() 當(dāng)具有該名稱的文件不存在時泊窘,創(chuàng)建一個由該抽象路徑名命名的新空文件 public boolean mkdir() 創(chuàng)建由此抽象路徑名命名的目錄 public boolean mkdirs() 創(chuàng)建由此抽象路徑名命名的目錄豪嗽,包括任何必需但不存在的父目錄 -
示例代碼
public class FileDemo02 { public static void main(String[] args) throws IOException { //需求1:我要在E:\\itcast目錄下創(chuàng)建一個文件java.txt File f1 = new File("E:\\itcast\\java.txt"); System.out.println(f1.createNewFile()); System.out.println("--------"); //需求2:我要在E:\\itcast目錄下創(chuàng)建一個目錄JavaSE File f2 = new File("E:\\itcast\\JavaSE"); System.out.println(f2.mkdir()); System.out.println("--------"); //需求3:我要在E:\\itcast目錄下創(chuàng)建一個多級目錄JavaWEB\\HTML File f3 = new File("E:\\itcast\\JavaWEB\\HTML"); // System.out.println(f3.mkdir()); System.out.println(f3.mkdirs()); System.out.println("--------"); //需求4:我要在E:\\itcast目錄下創(chuàng)建一個文件javase.txt File f4 = new File("E:\\itcast\\javase.txt"); // System.out.println(f4.mkdir()); System.out.println(f4.createNewFile()); } }
1.4File類刪除功能
-
方法分類
方法名 說明 public boolean delete() 刪除由此抽象路徑名表示的文件或目錄 -
示例代碼
public class FileDemo03 { public static void main(String[] args) throws IOException { // File f1 = new File("E:\\itcast\\java.txt"); //需求1:在當(dāng)前模塊目錄下創(chuàng)建java.txt文件 File f1 = new File("myFile\\java.txt"); // System.out.println(f1.createNewFile()); //需求2:刪除當(dāng)前模塊目錄下的java.txt文件 System.out.println(f1.delete()); System.out.println("--------"); //需求3:在當(dāng)前模塊目錄下創(chuàng)建itcast目錄 File f2 = new File("myFile\\itcast"); // System.out.println(f2.mkdir()); //需求4:刪除當(dāng)前模塊目錄下的itcast目錄 System.out.println(f2.delete()); System.out.println("--------"); //需求5:在當(dāng)前模塊下創(chuàng)建一個目錄itcast,然后在該目錄下創(chuàng)建一個文件java.txt File f3 = new File("myFile\\itcast"); // System.out.println(f3.mkdir()); File f4 = new File("myFile\\itcast\\java.txt"); // System.out.println(f4.createNewFile()); //需求6:刪除當(dāng)前模塊下的目錄itcast System.out.println(f4.delete()); System.out.println(f3.delete()); } }
1.5File類判斷和獲取功能
-
判斷功能
方法名 說明 public boolean isDirectory() 測試此抽象路徑名表示的File是否為目錄 public boolean isFile() 測試此抽象路徑名表示的File是否為文件 public boolean exists() 測試此抽象路徑名表示的File是否存在 -
獲取功能
方法名 說明 public String getAbsolutePath() 返回此抽象路徑名的絕對路徑名字符串 public String getPath() 將此抽象路徑名轉(zhuǎn)換為路徑名字符串 public String getName() 返回由此抽象路徑名表示的文件或目錄的名稱 public File[] listFiles() 返回此抽象路徑名表示的目錄中的文件和目錄的File對象數(shù)組 -
示例代碼
public class FileDemo04 { public static void main(String[] args) { //創(chuàng)建一個File對象 File f = new File("myFile\\java.txt"); // public boolean isDirectory():測試此抽象路徑名表示的File是否為目錄 // public boolean isFile():測試此抽象路徑名表示的File是否為文件 // public boolean exists():測試此抽象路徑名表示的File是否存在 System.out.println(f.isDirectory()); System.out.println(f.isFile()); System.out.println(f.exists()); // public String getAbsolutePath():返回此抽象路徑名的絕對路徑名字符串 // public String getPath():將此抽象路徑名轉(zhuǎn)換為路徑名字符串 // public String getName():返回由此抽象路徑名表示的文件或目錄的名稱 System.out.println(f.getAbsolutePath()); System.out.println(f.getPath()); System.out.println(f.getName()); System.out.println("--------"); // public File[] listFiles():返回此抽象路徑名表示的目錄中的文件和目錄的File對象數(shù)組 File f2 = new File("E:\\itcast"); File[] fileArray = f2.listFiles(); for(File file : fileArray) { // System.out.println(file); // System.out.println(file.getName()); if(file.isFile()) { System.out.println(file.getName()); } } } }
1.6File類練習(xí)一
-
案例需求
在當(dāng)前模塊下的aaa文件夾中創(chuàng)建一個a.txt文件
-
實現(xiàn)步驟
- 創(chuàng)建File對象,指向aaa文件夾
- 判斷aaa文件夾是否存在,如果不存在則創(chuàng)建
- 創(chuàng)建File對象,指向aaa文件夾下的a.txt文件
- 創(chuàng)建這個文件
-
代碼實現(xiàn)
public class Test1 { public static void main(String[] args) throws IOException { //練習(xí)一:在當(dāng)前模塊下的aaa文件夾中創(chuàng)建一個a.txt文件 /* File file = new File("filemodule\\aaa\\a.txt"); file.createNewFile();*/ //注意點:文件所在的文件夾必須要存在. //1.創(chuàng)建File對象,指向aaa文件夾 File file = new File("filemodule\\aaa"); //2.判斷aaa文件夾是否存在,如果不存在則創(chuàng)建 if(!file.exists()){ //如果文件夾不存在,就創(chuàng)建出來 file.mkdirs(); } //3.創(chuàng)建File對象,指向aaa文件夾下的a.txt文件 File newFile = new File(file,"a.txt"); //4.創(chuàng)建這個文件 newFile.createNewFile(); } }
1.7File類練習(xí)二
-
案例需求
刪除一個多級文件夾
-
實現(xiàn)步驟
- 定義一個方法,接收一個File對象
- 遍歷這個File對象,獲取它下邊的每個文件和文件夾對象
- 判斷當(dāng)前遍歷到的File對象是文件還是文件夾
- 如果是文件,直接刪除
- 如果是文件夾,遞歸調(diào)用自己,將當(dāng)前遍歷到的File對象當(dāng)做參數(shù)傳遞
- 參數(shù)傳遞過來的文件夾File對象已經(jīng)處理完成,最后直接刪除這個空文件夾
-
代碼實現(xiàn)
public class Test2 { public static void main(String[] args) { //練習(xí)二:刪除一個多級文件夾 //delete方法 //只能刪除文件和空文件夾. //如果現(xiàn)在要刪除一個有內(nèi)容的文件夾? //先刪掉這個文件夾里面所有的內(nèi)容. //最后再刪除這個文件夾 File src = new File("C:\\Users\\apple\\Desktop\\src"); deleteDir(src); } //1.定義一個方法,接收一個File對象 private static void deleteDir(File src) { //先刪掉這個文件夾里面所有的內(nèi)容. //遞歸 方法在方法體中自己調(diào)用自己. //注意: 可以解決所有文件夾和遞歸相結(jié)合的題目 //2.遍歷這個File對象,獲取它下邊的每個文件和文件夾對象 File[] files = src.listFiles(); //3.判斷當(dāng)前遍歷到的File對象是文件還是文件夾 for (File file : files) { //4.如果是文件,直接刪除 if(file.isFile()){ file.delete(); }else{ //5.如果是文件夾,遞歸調(diào)用自己,將當(dāng)前遍歷到的File對象當(dāng)做參數(shù)傳遞 deleteDir(file);//參數(shù)一定要是src文件夾里面的文件夾File對象 } } //6.參數(shù)傳遞過來的文件夾File對象已經(jīng)處理完成,最后直接刪除這個空文件夾 src.delete(); } }
1.8File類練習(xí)三
-
案例需求
統(tǒng)計一個文件夾中每種文件的個數(shù)并打印
打印格式如下:
txt:3個 doc:4個 jpg:6個 …
-
實現(xiàn)步驟
- 定義一個方法,參數(shù)是HashMap集合用來統(tǒng)計次數(shù)和File對象要統(tǒng)計的文件夾
- 遍歷File對象,獲取它下邊的每一個文件和文件夾對象
- 判斷當(dāng)前File對象是文件還是文件夾
- 如果是文件,判斷這種類型文件后綴名在HashMap集合中是否出現(xiàn)過
- 沒出現(xiàn)過,將這種類型文件的后綴名存入集合中,次數(shù)存1
- 出現(xiàn)過,獲取這種類型文件的后綴名出現(xiàn)的次數(shù),對其+1,在存回集合中
- 如果是文件夾,遞歸調(diào)用自己,HashMap集合就是參數(shù)集合,File對象是當(dāng)前文件夾對象
-
代碼實現(xiàn)
public class Test3 { public static void main(String[] args) { //統(tǒng)計一個文件夾中,每種文件出現(xiàn)的次數(shù). //統(tǒng)計 --- 定義一個變量用來統(tǒng)計. ---- 弊端:同時只能統(tǒng)計一種文件 //利用map集合進(jìn)行數(shù)據(jù)統(tǒng)計,鍵 --- 文件后綴名 值 ---- 次數(shù) File file = new File("filemodule"); HashMap<String, Integer> hm = new HashMap<>(); getCount(hm, file); System.out.println(hm); } //1.定義一個方法,參數(shù)是HashMap集合用來統(tǒng)計次數(shù)和File對象要統(tǒng)計的文件夾 private static void getCount(HashMap<String, Integer> hm, File file) { //2.遍歷File對象,獲取它下邊的每一個文件和文件夾對象 File[] files = file.listFiles(); for (File f : files) { //3.判斷當(dāng)前File對象是文件還是文件夾 if(f.isFile()){ //如果是文件,判斷這種類型文件后綴名在HashMap集合中是否出現(xiàn)過 String fileName = f.getName(); String[] fileNameArr = fileName.split("\\."); if(fileNameArr.length == 2){ String fileEndName = fileNameArr[1]; if(hm.containsKey(fileEndName)){ //出現(xiàn)過,獲取這種類型文件的后綴名出現(xiàn)的次數(shù),對其+1,在存回集合中 Integer count = hm.get(fileEndName); //這種文件又出現(xiàn)了一次. count++; //把已經(jīng)出現(xiàn)的次數(shù)給覆蓋掉. hm.put(fileEndName,count); }else{ // 沒出現(xiàn)過,將這種類型文件的后綴名存入集合中,次數(shù)存1 hm.put(fileEndName,1); } } }else{ //如果是文件夾,遞歸調(diào)用自己,HashMap集合就是參數(shù)集合,File對象是當(dāng)前文件夾對象代碼實現(xiàn) getCount(hm,f); } } } }