參考筆記:java File類基礎 萬字詳解(通俗易懂)-CSDN博客?
目錄
1.前言
2. File類介紹
3. File類構造方法
4.File類常用的方法+案例演示
4.1 創建文件/文件夾的方法
4.2 刪除文件/文件夾的方法
4.3 判斷文件/文件夾是否存在的方法
4.4 獲取功能的方法
1.前言
本文講解 File 類,內容包括:File 類介紹、File類構造器、File類常用的方法+案例演示
2. File類介紹
① File ,即文件、文件夾,一個 File 對象可以表示磁盤上的某個文件或文件夾。在 Java 中,File? 類實質是以文件或者文件夾的路徑來操作的。File 類是 java.io 包中唯一代表磁盤文件本身的對象
② File 的類定義、繼承關系圖如下:
File 類實現了 Serializable 接口,使得 File 類的對象可以串行化。串行化后,對象可以進行網絡傳輸,也可以保存到文件。而 Comparable 接口的實現使得 File 對象可以進行比較
③?File 類以文件或文件夾為單位進行操作,因此不能直接訪問文件的內容,若想訪問文件內容,需要配合 Java 中的 IO 流來完成。本文主要講的是 File 類的一些常用方法,未涉及到 IO 流
3. File類構造方法
File 有 3 個常用的構造方法,如下:
① File(String pathname):pathname 為文件/文件夾路徑,傳入相對路徑和絕對路徑均可
② File(String parent,String child):和第一種構造方式大同小異。只不過將文件路徑劈開了, parent 為父路徑,child 為子路徑
③ File(File parent, String child):與前兩種構造方式略有差異:將文件路徑劈開后,先將父路徑封裝成了 File 類型,再分別將 "File類型的父路徑" 和 "String類型的子路徑" 作為實參
PS:使用 File 類的構造器 new 出一個 File 類對象時,并不會直接在磁盤上生成一個文件噢,僅僅是在內存中有了一個 File 對象,此時還未與磁盤發生實際的聯系
案例演示
import java.io.File;
import java.io.IOException;public class demo {public static void main (String[] args) throws IOException {//建議直接拋出父類異常/**演示File類的三種構造方法**///1.File (String pathname):File file1 = new File("D:\\javaProjects\\untitled\\1.txt");System.out.println("給👴看看file1對象長啥樣:\n" + file1);System.out.println("---------------------------------");//2.File(String parent, String child):File file2 = new File("D:\\javaProjects\\untitled", "2.txt");System.out.println("給👴看看file2對象長啥樣:\n" + file2);System.out.println("---------------------------------");//3.File(File parent, String child):File parent = new File("D:\\javaProjects\\untitled");File file3 = new File(parent, "3.txt");System.out.println("給👴看看file3對象長啥樣:\n" + file3);}
}
運行結果:?
從輸出結果來看,File 類型對象其實就是磁盤文件的路徑。前面也已經說到,new File() 并不會直接在磁盤上生成文件,我們可以查看一下 D:\javaProjectos\untitled 目錄下是否有生成 1.txt、2.txt、3.txt 文件,如下:
可以看到,此目錄下確實沒有生成新文件。那就有人要問了,那這 File 對象有毛用啊?別急,繼續往下看
4.File類常用的方法+案例演示
4.1 創建文件/文件夾的方法
前言:在上文我們說到,創建一個File類對象時,僅僅是在內存中有了一個 File 對象,還未與磁盤發生實際的聯系。這時候就可以調用以下的 3 個方法在磁盤的相應位置上創建文件/文件夾
創建文件/文件夾常用的 3 種方式如下:
①?boolean createNewFile():根據 File 類對象對應的路徑創建新文件
②?boolean mkdir():根據 File 類對象對應的路徑創建目錄(即文件夾),但只能是單級目錄
③?boolean mkdirs():根據 File 類對象對應的路徑創建目錄,既可以是單級目錄,也可以是多級目錄
PS:對于創建文件/文件夾的方法,如果 File 對象對應的文件/文件夾在磁盤上不存在,則創建該文件并返回 true;如果已經存在,則不創建,返回 false
案例演示
演示代碼中使用路徑是:D:\javaProjects\\untitled\fileDemo ,該目錄的情況如下所示,是一個空目錄:
演示代碼如下:?
import java.io.File;
import java.io.IOException;
public class demo {public static void main(String[] args) throws IOException{//建議直接拋出父類異常IOException/**演示三種創建方式**///1.createNewFile():創建文件File file1 = new File("D:\\javaProjects\\untitled\\fileDemo\\1.txt");boolean bool1 = file1.createNewFile();//創建1.txt文件成功,bool1 = trueboolean bool1ex = file1.createNewFile();//相同的文件對象只能成功創建一次,除非你刪了它。bool1ex = falseSystem.out.println("創建1.txt文件成功了嗎:" + bool1);//第一次創建成功,是trueSystem.out.println("文件已經存在,創建1.txt文件成功了嗎:" + bool1ex);//第二次輸出就是false了,因為已經存在System.out.println();//2.mkdir:創建單級目錄File file2 = new File("D:\\javaProjects\\untitled\\fileDemo\\test");boolean bool2 = file2.mkdir();System.out.println("創建test目錄情況如何:" + bool2);System.out.println();//3.mkdirs:創建單級目錄或多級目錄File file3 = new File("D:\\javaProjects\\untitled\\fileDemo\\a\\b");boolean bool3 = file3.mkdirs();System.out.println("創建多級目錄成功了沒有:" + bool3);}
}
運行結果如下,以 GIF 圖展示:
4.2 刪除文件/文件夾的方法
boolean delete ():刪除 File 類對象對應路徑的文件/空文件夾,返回值如下:
????????①??File 類對象路徑的文件/空文件夾在磁盤上存在:刪除成功返回 true ,刪除失敗返回 false
????????②??File 類對象路徑的文件/空文件夾在磁盤上不存在:返回 false
案例演示
演示代碼中使用到路徑是:D:\javaProjects\\untitled\fileDemo\,此目錄的情況如下所示:
此目錄下,有 1.txt 和 空文件夾 test ,演示類中將使用 delete() 刪除 1.txt 、test 空文件夾
演示代碼如下:
import java.io.File;
import java.io.IOException;
public class demo {public static void main(String[] args) throws IOException{//建議直接拋出父類異常IOException/**演示刪除文件/文件夾方式**///1、刪除1.txt文件File file1 = new File("D:\\javaProjects\\untitled\\fileDemo\\1.txt");boolean bool1 = file1.delete();System.out.println("1.txt文件刪除了沒有?"+bool1);//2、刪除test空文件夾File file2 = new File("D:\\javaProjects\\untitled\\fileDemo\\test");boolean bool2 = file2.delete();System.out.println("test空文件刪除了沒有?"+bool2);}
}
控制臺輸出結果如下:
執行效果如下:
可以看到, 1.txt 、test空文件夾均成功刪除
4.3 判斷文件/文件夾是否存在的方法
常用的三種判斷方法如下:
① boolean isDirectory():判斷 File 對象對應的路徑是否為目錄(即文件夾)
② boolean isFile():判斷 File 對象對應的路徑是否為文件
③ boolean exists():判斷 File 對象對應的路徑是否存在
PS:如果 File 對象對應的路徑的文件/文件夾在磁盤上并沒有創建,則以上三個方法均是返回 false
案例演示
演示代碼中使用到路徑是:D:\javaProjects\\untitled\fileDemo\,此目錄的情況如下所示:?
此目錄下有 2.txt 、test 空文件夾?
演示代碼:?
import java.io.File;
import java.io.IOException;
public class demo {public static void main(String[] args) throws IOException {/**演示三種判斷方法:**///1.isDirectory():File file1 = new File("D:\\javaProjects\\untitled\\fileDemo\\test");boolean bool1 = file1.isDirectory();//trueSystem.out.println("file1對象對應的路徑是不是目錄:" + bool1);//trueSystem.out.println("---------------------------------------------");//2.isFile():File file2 = new File("D:\\javaProjects\\untitled\\fileDemo\\2.txt");boolean bool2 = file1.isFile();//trueSystem.out.println("file2對象對應的路徑是不是文件:" + bool2);//trueSystem.out.println("---------------------------------------------");//3.exists():File file3 = new File("D:\\javaProjects\\untitled\\fileDemo\\999.txt");//注意,磁盤中此時并沒有999.txt噢boolean bool3 = file3.exists();//falseboolean bool3ex = file3.isFile();//falseSystem.out.println("file3對應的999.txt這個文件現在存在嗎:" + bool3);System.out.println("999.txt現在還沒創建,那它是文件嗎:" + bool3ex);System.out.println("---------------------------------------------");file3.createNewFile();boolean bool4 = file3.exists();boolean bool4ex = file3.isFile();System.out.println("已經創建的999.txt這個文件現在存在了嗎:" + bool4);System.out.println("已經創建的999.txt是文件嗎:" + bool4ex);}
}
/*Summary:文件只有在被創建后,才能被判斷為是文件!
*/
控制臺輸出結果:
從輸出結果來看,當 999.txt 文件沒有被創建時,判斷它是不是文件,結果是 false ;當它被創建后,它既存在,也是文件。因此文件/文件夾只有在被創建后才能被判斷為是文件/文件夾
執行效果:
4.4 獲取功能的方法
常用的 7 種獲取方法:
① String getAbsolutePath():獲取 File 對象對應的絕對路徑
② String getPath():獲取 File 對象對應的相對路徑
③ String getName():獲取 File 的文件名
④ String getParent():獲取 File 的父級目錄
⑤ long length():獲取 File 的文件大小,以字節 byte?計算,long 類型作接收
⑥ String[ ] list():獲取指定目錄下所有文件/文件夾的名稱數組
⑦ File[ ] listFiles():獲取指定目錄下所有文件/文件夾的 File 類型數組
PS:再強調一點,IDEA相對路徑一般指相對于當前項目路徑開始
案例演示
演示類位于 D:\javaProjects\untitled\src\demo.java ,如下:
演示類中使用到的路徑是:D:\javaProjects\untitled\fileDemo\ ,此目錄的情況如下所示:
可以看到,該目錄下有文件 2.txt、999.txt、?test 文件夾 、test1 文件夾,其中 2.txt 的內容是:蔡徐坤yyds,每個漢字占 3 個字節,英文字符占 1 個字節,所以 2.txt 的文件大小是 13byte
演示代碼:
import java.io.File;
import java.io.IOException;
public class demo {public static void main(String[] args) throws IOException {/**演示File類的7種常用獲取方法**///1.getAbsolutePath():獲取file對象對應的絕對路徑File file = new File("fileDemo\\2.txt");//傳入的是相對路徑,IDEA的相對路徑默認從項目名開始String absolutePath = file.getAbsolutePath();System.out.println("輸出file對象的絕對路徑:" + absolutePath);//D:javaProjects/untitled/fileDemo/2.txtSystem.out.println("=================================");//2.getPath(): 獲取file對象對應的相對路徑String path = file.getPath();System.out.println("輸出file對象的相對路徑:" + path);//fileDemo/2.txtSystem.out.println("=================================");//3.getName(): 獲取file的文件名String fileName = file.getName();System.out.println("輸出file對象的文件名:" + fileName);//2.txtSystem.out.println("=================================");//4.getName(): 獲取file的文件名String parentName = file.getParent();System.out.println("輸出file對象的父級目錄:" + parentName);//fileDemoSystem.out.println("=================================");//5.length(): 獲取file文件的大小(以字節為單位進行計算)long size = file.length();System.out.println("file文件的大小 = " + size + " byte");//13byteSystem.out.println("=================================");//6.list(): 獲取指定目錄下所有文件/文件夾的名稱數組File file1 = new File("D:\\javaProjects\\untitled\\fileDemo");String[] fileNames = file1.list();System.out.println("file對象"+file1+"下的所有文件/文件夾名稱:");for (String fName : fileNames) {System.out.println(fName);}//7.listFiles(): 獲取指定目錄下所有文件/文件夾的File類型數組File[] files = file1.listFiles();System.out.println("file對象"+file1+"下的所有文件/文件夾對應的File對象:");for (File filePlus : files) {System.out.println(filePlus);}}
}
輸出結果:?
🆗,以上就是本文的全部內容?