說明
File對象就表示一個路徑,可以是文件的路徑、也可以是文件夾的路徑
這個路徑可以是存在的,也允許是不存在的
獲取File對象
方法名稱 | 說明 |
public File(String pathname) | 根據文件路徑創建文件對象 |
public File(String parent,String child) | 根據父路徑名字符串和子路徑名字符串創建文件對象 |
public File(File parent,String child) | 根據父路徑對應文件對象和子路徑名字符串創建文件對象? |
代碼演示?
import java.io.File;public class Test1 {public static void main(String[] args) {//根據文件路徑創建文件對象File f1 = new File("D:\\aaa\\a.txt");System.out.println(f1);//D:\aaa\a.txt//根據父路徑名字符串和子路徑名字符串創建文件對象String parent = "D:\\aaa";String child = "a.txt";File f2 = new File(parent, child);System.out.println(f2);//D:\aaa\a.txt//根據父路徑對應文件對象和子路徑名字符串創建文件對象File f3 = new File("D:\\aaa");File f4 = new File(f3, "a.txt");System.out.println(f4);//D:\aaa\a.txt}
}
File的常見成員方法
判斷、獲取
方法名稱 | 說明 |
public boolean isDirectory() | 判斷此路徑名表示的File是否為文件夾 |
public boolean isFile() | 判斷此路徑名表示的File是否為文件 |
public boolean exists() | 判斷此路徑名表示的File是否存在 |
public long length() | 返回文件的大小(字節數量) |
public string getAbsolutePath() | 返回文件的絕對路徑 |
public String getPath() | 返回定義文件時使用的路徑 |
public String getName() | 返回文件的名稱,帶后綴 |
public long lastModified() | 返回文件的最后修改時間(時間毫秒值)? |
代碼演示
下面代碼中涉及到的存在的文件及文件夾:
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;public class Test2 {public static void main(String[] args) {//判斷此路徑名表示的File是否為文件夾,是否為文件,是否存在//對于一個存在的文件File f1 = new File("D:\\aaa\\a.txt");System.out.println(f1.isDirectory());//falseSystem.out.println(f1.isFile());//trueSystem.out.println(f1.exists());//true//對于一個存在的文件夾File f2 = new File("D:\\aaa\\bbb");System.out.println(f2.isDirectory());//trueSystem.out.println(f2.isFile());//falseSystem.out.println(f2.exists());//true//對于一個不存在的文件File f3 = new File("D:\\aaa\\c.txt");System.out.println(f3.isDirectory());//falseSystem.out.println(f3.isFile());//falseSystem.out.println(f3.exists());//false//對于一個不存在的文件夾File f4 = new File("D:\\aaa\\ccc");System.out.println(f4.isDirectory());//falseSystem.out.println(f4.isFile());//falseSystem.out.println(f4.exists());//false//返回文件的大小(字節數量)//可以通過將文件夾中的文件的大小累加起來算出文件夾的大小File f5 = new File("D:\\aaa\\a.txt");System.out.println(f5.length());//518//返回文件的絕對路徑//即使傳遞的是相對路徑,返回的也是絕對路徑File f6 = new File("day04\\a.txt");System.out.println(f6.getAbsolutePath());//D:\JavaCode\csdn\day04\a.txt//返回定義文件時使用的路徑//定義文件時使用相對路徑就返回相對路徑//定義文件時使用絕對路徑就返回絕對路徑File f7 = new File("day04\\a.txt");System.out.println(f6.getPath());//day04\a.txt//返回文件的名稱,帶后綴File f8 = new File("D:\\aaa\\a.txt");System.out.println(f8.getName());//a.txt//返回文件的最后修改時間(時間毫秒值)File f9 = new File("D:\\aaa\\a.txt");long time = f9.lastModified();System.out.println(time);//1747640455223//可以將其解析為字符串形式Date d = new Date(time);SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String timeStr = sdf.format(d);System.out.println(timeStr);//2025-05-19 15:40:55}
}
創建、刪除
方法名稱 | 說明 |
public boolean createNewFile() | 創建一個新的空的文件 |
public boolean mkdir() | 創建單級文件夾 |
public boolean mkdirs() | 創建多級文件夾 |
public boolean delete() | 刪除文件、空文件夾 |
代碼演示
import java.io.File;
import java.io.IOException;public class Test3 {public static void main(String[] args) throws IOException {//創建一個新的空的文件//細節1:如果當前路徑表示的文件是不存在的,則創建成功,方法返回true// 如果當前路徑表示的文件是存在的,則創建失敗,方法返回false//細節2:如果父級路徑是不存在的,那么方法會有異常IOException//細節3:創建的一定是文件,如果路徑中不包含后綴名,則創建一個沒有后綴的文件File f1 = new File("D:\\aaa\\a.txt");boolean flag1 = f1.createNewFile();//創建單級文件夾File f2 = new File("D:\\aaa\\bbb");boolean flag2 = f2.mkdir();//創建多級文件夾//可以在要創建的文件夾里再創建文件夾File f3 = new File("D:\\aaa\\ccc\\ddd");boolean flag3 = f3.mkdirs();//創建多級文件夾的方法也能創建單級文件夾//創建多級文件夾方法的底層就是創建單級文件夾的方法//刪除文件、空文件夾//如果刪除的是文件,則直接刪除,返回true,不走回收站。//如果刪除的是空文件夾,則直接刪除,返回true,不走回收站//如果刪除的是有內容的文件夾,則刪除失敗,返回false。File f4 = new File("D:\\aaa\\a.txt");boolean flag4 = f4.delete();}
}
獲取并遍歷
核心方法
方法名稱 | 說明 |
public File[] listFiles() | 獲取當前該路徑下所有內容 |
注意事項:
1. 當調用者File表示的路徑不存在時,返回null
2. 當調用者File表示的路徑是文件時,返回null
3. 當調用者File表示的路徑是一個空文件夾時,返回一個長度為0的數組
4. 當調用者File表示的路徑是一個有內容的文件夾時,將里面所有文件和文件夾的路徑放在File數組中返回
5. 當調用者File表示的路徑是一個有隱藏文件的文件夾時,將里面所有文件和文件夾的路徑放在File數組中返回,包含隱藏文件
6. 當調用者File表示的路徑是需要權限才能訪問的文件夾時,返回null
代碼演示
下面代碼中涉及到的文件及文件夾:
import java.io.File;public class Test4 {public static void main(String[] args) {//public File[] listFiles() 獲取當前該路徑下所有內容File f = new File("D:\\aaa");File[] files = f.listFiles();for (File file : files) {System.out.println(file);}//D:\aaa\a.txt//D:\aaa\aaa//D:\aaa\b.txt//D:\aaa\bbb//D:\aaa\c.txt}
}
其他方法
方法名稱 | 說明 |
public static File[] listRoots() | 列出可用的文件系統根 |
public String[] list() | 以字符串形式獲取當前該路徑下所有內容 |
public String[] list(FilenameFilter filter) | 利用文件名過濾器獲取 |
public File[] listFiles(FileFilter filter) | 利用文件名過濾器獲取 |
public File[] listFiles(FilenameFilter filter) | 利用文件名過濾器獲取 |
代碼演示
下面代碼中涉及到的文件及文件夾:
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
import java.util.Arrays;public class Test5 {public static void main(String[] args) {//列出可用的文件系統根File[] files1 = File.listRoots();for (File file : files1) {System.out.println(file);}//C:\//D:\File f1 = new File("D:\\aaa");//以字符串形式獲取當前該路徑下所有內容String[] arr1 = f1.list();System.out.println(Arrays.toString(arr1));//[a.txt, aaa, b.txt, bbb, c.txt]//利用文件名過濾器獲取//list(FilenameFilter filter)//返回String[]//accept方法的形參依次表示aaa文件夾里面每一個文件或者文件夾的路徑//參數一:父級路徑//參數二:子級路徑//返回值:如果返回值為true,就表示當前路徑保留//如果返回值為false,就表示當前路徑舍棄不要//若只想保留txt文件,則:String[] arr2 = f1.list(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File f = new File(dir, name);return f.isFile() && name.endsWith(".txt");}});System.out.println(Arrays.toString(arr2));//[a.txt, b.txt, c.txt]//listFiles(FileFilter filter)//返回File[]//accept方法的形參依次表示aaa文件夾里面每一個文件或者文件夾的完整路徑File[] files2 = f1.listFiles(new FileFilter() {@Overridepublic boolean accept(File pathname) {return pathname.isFile() && pathname.getName().endsWith(".txt");}});//listFiles(FilenameFilter filter)//返回File[]//accept方法的形參依次表示aaa文件夾里面每一個文件或者文件夾的路徑//參數一:父級路徑//參數二:子級路徑File[] files3 = f1.listFiles(new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {File f = new File(dir, name);return f.isFile() && name.endsWith(".txt");}});for (File file : files3) {System.out.println(file);}//D:\aaa\a.txt//D:\aaa\b.txt//D:\aaa\c.txt}
}
案例練習
練習涉及的文件路徑如圖所示
利用遞歸的思想查找文件
查找上述文件路徑中所有的txt文件
import java.io.File;public class Test6 {public static void main(String[] args) {File f = new File("D:\\src");findTXT(f);//D:\src\a.txt//D:\src\aaa\a.txt//D:\src\b.txt//D:\src\bbb\b.txt}//定義方法解析查找public static void findTXT(File f){//進入文件夾,依次遍歷該文件夾的內容File[] files = f.listFiles();for (File file:files){//判斷是否為文件if (file.isFile()){//是文件,判斷是否是txt文件if(file.getName().endsWith(".txt")){//是就輸出System.out.println(file);}}else{//是文件夾,進行遞歸,查找該文件夾里的txt文件findTXT(file);}}}
}
利用遞歸的思想計算文件夾的大小
因為length方法只能得到文件的大小,所以可以使用遞歸,遇到文件夾就累加其中文件的大小并返回
import java.io.File;public class Test7 {public static void main(String[] args) {File f = new File("D:\\src");long length = getLength(f);System.out.println(length);//77028}//定義方法計算文件夾的大小public static long getLength(File f) {long length = 0L;//進入文件夾,依次遍歷該文件夾的內容File[] files = f.listFiles();for (File file : files) {//判斷是否為文件if (file.isFile()) {//是文件,累加文件的大小length = length + file.length();} else {//是文件夾,進行遞歸,累加該文件夾里的文件大小length = length + getLength(file);}}return length;}
}
利用遞歸的思想刪除有內容的文件夾
因為有內容的文件夾不可以用delete進行刪除,所以可以使用遞歸將文件夾里的內容刪除,再刪除空文件夾
import java.io.File;public class Test8 {public static void main(String[] args) {File f = new File("D:\\src");myDelete(f);}//定義方法刪除文件夾public static void myDelete(File f) {//進入文件夾,依次遍歷該文件夾的內容File[] files = f.listFiles();for (File file : files) {//判斷是否為文件if (file.isFile()) {//是文件,直接刪除file.delete();} else {//是文件夾,進行遞歸,刪除該文件夾myDelete(file);}}//走到這步,說明文件夾中的內容已被刪除//可以刪除空文件夾f.delete();}
}