哈嘍,各位小伙伴們,你們好呀,我是喵手。運營社區:C站/掘金/騰訊云;歡迎大家常來逛逛
??今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一個人雖可以走的更快,但一群人可以走的更遠。
??我是一名后端開發愛好者,工作日常接觸到最多的就是Java語言啦,所以我都盡量抽業余時間把自己所學到所會的,通過文章的形式進行輸出,希望以這種方式幫助到更多的初學者或者想入門的小伙伴們,同時也能對自己的技術進行沉淀,加以復盤,查缺補漏。
小伙伴們在批閱的過程中,如果覺得文章不錯,歡迎點贊、收藏、關注哦。三連即是對作者我寫作道路上最好的鼓勵與支持!
哈嘍,各位小伙伴們,你們好呀,我是喵手。
??今天我要給大家分享一些自己日常學習到的一些知識點,并以文字的形式跟大家一起交流,互相學習,一個人雖可以走的更快,但一群人可以走的更遠。
??我是一名后端開發愛好者,工作日常接觸到最多的就是Java語言啦,所以我都盡量抽業余時間把自己所學到所會的,通過文章的形式進行輸出,希望以這種方式幫助到更多的初學者或者想入門的小伙伴們,同時也能對自己的技術進行沉淀,加以復盤,查缺補漏。
小伙伴們在批閱的過程中,如果覺得文章不錯,歡迎點贊、收藏、關注哦。三連即是對作者我寫作道路上最好的鼓勵與支持!
前言
??在Java開發中,文件IO操作是常見的操作之一,而文件操作的基礎就是File類。File類提供了一系列的方法來操作文件和文件夾,它是Java文件和目錄路徑名的抽象表示。
摘要
??在本文中,我們將會深入了解Java中的File類,探究它的應用場景、優缺點,并通過源代碼解析和實際案例來演示如何使用File類。
File類
簡介
在Java中,File類表示一個文件或者目錄的路徑。它提供了創建、刪除、查詢、修改文件和目錄的方法。
File類的構造方法有以下幾種:
File(String pathname)
:通過給定的路徑名字符串創建一個新的File實例。File(String parent, String child)
:通過給定的父路徑和子路徑字符串創建一個新的File實例。File(File parent, String child)
:從給定的父抽象路徑名和子路徑名字符串創建一個新的File實例。
File類常用的方法包括:
exists()
:測試此抽象路徑名表示的文件或目錄是否存在。isDirectory()
:測試此抽象路徑名表示的文件是否為目錄。isFile()
:測試此抽象路徑名表示的文件是否為標準文件。createNewFile()
:創建此抽象路徑名指定的新文件。mkdir()
:創建此抽象路徑名指定的目錄。list()
:返回一個字符串數組,命名由此抽象路徑名表示的目錄中的文件和目錄。renameTo(File dest)
:將此抽象路徑名表示的文件重命名為指定的路徑名。
源代碼解析
以下是File類的源代碼:
public class File implements Serializable, Comparable<File> {//字段private final String path;//構造方法public File(String pathname) {if (pathname == null) {throw new NullPointerException();}this.path = fs.normalize(pathname);}//方法public boolean exists() {SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(path);}return ((fs.getBooleanAttributes(this) & FileSystem.BA_EXISTS) != 0);}public boolean isDirectory() {SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(path);}return ((fs.getBooleanAttributes(this) & FileSystem.BA_DIRECTORY) != 0);}public boolean isFile() {SecurityManager security = System.getSecurityManager();if (security != null) {security.checkRead(path);}return ((fs.getBooleanAttributes(this) & FileSystem.BA_REGULAR) != 0);}//省略其他方法
}
??可以看出,File類的實現非常簡單,主要是對文件、目錄的一些基本操作。實現了Serializable、Comparable 接口。其中包含了一個字段path,表示文件路徑。構造方法用于初始化File對象,被傳入的參數pathname表示文件的路徑。方法中包含了exists()、isDirectory()、isFile()等用于判斷文件是否存在、是否是目錄、是否是文件的方法,并通過調用FileSystem類的方法獲取文件的屬性進行判斷。該代碼還省略了其他方法。
如下是部分源碼截圖:
應用場景案例
下面通過一些具體案例,來演示File類的應用場景。
創建目錄
File dir = new File("mydir");
if(!dir.exists()) {dir.mkdir();
}
創建文件
File file = new File("myfile.txt");
if(!file.exists()) {file.createNewFile();
}
刪除文件
File file = new File("myfile.txt");
if(file.exists()) {file.delete();
}
列出目錄下的文件和目錄名
File dir = new File("mydir");
if(dir.isDirectory()) {String[] files = dir.list();for(String fileName : files) {System.out.println(fileName);}
}
拓展:
??這段代碼的作用是遍歷名為"mydir"的文件夾中的所有文件,如果該文件夾存在且是文件夾類型,那么將文件夾中所有文件的文件名打印出來。
具體分析如下:
-
創建一個File對象dir,指定文件夾路徑為"mydir"。
-
調用isDirectory()方法判斷該File對象對應的路徑是否是一個文件夾,如果是則繼續執行。
-
調用list()方法獲取該文件夾中的所有文件名,保存到一個字符串數組中。
-
遍歷該字符串數組,對于每一個文件名,將其打印出來。
??注意:該代碼并不會輸出文件夾的名稱,只會輸出文件夾中的文件名。如果需要輸出文件夾名稱,可以將System.out.println(dir.getName())添加到代碼中。
遍歷目錄下的文件和目錄
public static void traverse(File file) {if(file.isFile()) {System.out.println(file.getPath());} else if(file.isDirectory()) {File[] files = file.listFiles();for(File f : files) {traverse(f);}}
}
拓展:
此代碼為遍歷文件系統中的所有文件和文件夾,并打印出所有文件的路徑。
- 定義了一個靜態方法
traverse()
,傳入參數為File
類型的文件對象file
。 - 判斷當前文件對象是否為文件,如果是文件,則打印出其路徑。
- 如果不是文件,則判斷其是否為文件夾,如果是文件夾,則獲取該文件夾下所有文件和子文件夾,然后遞歸調用
traverse()
方法,對每個文件或子文件夾進行遍歷操作。 - 當最底層的文件對象為文件時,執行步驟 2,打印出其路徑,然后返回上一級執行步驟 3,繼續遍歷其他文件或文件夾。直到遍歷完整個文件系統。
優缺點分析
優點
- File類提供了豐富的文件和目錄操作方法,方便程序員進行文件IO操作。
- File類的使用非常簡單,只要提供文件路徑或文件名即可創建文件對象。
- File類的性能較好,適用于對大文件和目錄的操作。
缺點
- File類在文件IO操作中對性能和內存的消耗較高,不適用于對大量的小文件的操作。
- File類無法實現文件鎖定和并發操作,不適用于多線程環境下的文件操作。
類代碼方法介紹
以下是File類中比較重要的方法介紹:
exists()
public boolean exists()
測試此抽象路徑名表示的文件或目錄是否存在。
如果此抽象路徑名表示的文件或目錄存在,則返回 true;否則返回 false。
isDirectory()
public boolean isDirectory()
測試此抽象路徑名表示的文件是否為目錄。
如果此抽象路徑名表示的文件為目錄,則返回 true;否則返回 false。
isFile()
public boolean isFile()
測試此抽象路徑名表示的文件是否為標準文件。
如果此抽象路徑名表示的文件為標準文件,則返回 true;否則返回 false。
createNewFile()
public boolean createNewFile() throws IOException
創建此抽象路徑名指定的新文件。
如果文件已存在,則不創建文件,并返回 false;否則創建一個新文件,返回 true。
mkdir()
public boolean mkdir()
創建此抽象路徑名指定的目錄。
如果目錄已經存在,則不創建目錄,并返回 false;否則創建一個新目錄,返回 true。
list()
public String[] list()
返回一個字符串數組,命名由此抽象路徑名表示的目錄中的文件和目錄。
如果此抽象路徑名不表示一個目錄,則返回 null。
renameTo()
public boolean renameTo(File dest)
將此抽象路徑名表示的文件重命名為指定的路徑名。
如果重命名操作成功,則返回 true;否則返回 false。
測試用例
以下是一些測試用例:
測試目錄創建和刪除
public static void testDirectory() {//測試目錄創建File dir = new File("mydir");if(!dir.exists()) {dir.mkdir();}//測試目錄刪除if(dir.exists()) {dir.delete();}
}
拓展:
??這段代碼定義了一個靜態的方法testDirectory(),用于測試目錄的創建和刪除。具體分析如下:
-
創建File對象dir,指定了目錄名為"mydir"。
-
判斷目錄是否存在,如果不存在,則使用mkdir()方法創建目錄。
-
判斷目錄是否存在,如果存在,則使用delete()方法刪除目錄。
??總體來說,這段代碼主要是為了測試目錄創建和刪除的功能,如果目錄存在,則會刪除目錄,如果不存在,則會創建目錄。
測試文件創建和刪除
public static void testFile() throws Exception {//測試文件創建File file = new File("myfile.txt");if(!file.exists()) {file.createNewFile();}//測試文件刪除if(file.exists()) {file.delete();}
}
拓展:
??如上代碼定義了一個名為testFile的靜態方法,它可能會拋出異常。方法中有以下幾個步驟:
- 創建一個名為"myfile.txt"的File對象。
- 如果該文件不存在,則使用createNewFile()方法創建該文件。
- 如果該文件存在,則使用delete()方法刪除該文件。
??可以看出,該方法的主要作用是測試文件創建和刪除的功能。如果文件創建和刪除正常,代碼將不會拋出異常。否則,如果文件創建失敗或刪除失敗,將會拋出異常。
測試文件重命名
package com.example.javase.se.classes;import java.io.File;/*** @Author ms* @Date 2023-11-05 17:56*/
public class FileTest {public static void testRename() throws Exception {File oldFile = new File("test.txt");if (!oldFile.exists()) {oldFile.createNewFile();}File newFile = new File("newTest.txt");if (oldFile.exists() && !newFile.exists()) {oldFile.renameTo(newFile);}}public static void main(String[] args) throws Exception {testRename();}
}
測試結果
??根據如上測試用例,本地測試結果如下,僅供參考,你們也可以自行修改測試用例或者添加更多的測試數據或測試方法,進行熟練學習以此加深理解。
測試代碼分析
??根據如上測試用例,在此我給大家進行深入詳細的解讀一下測試代碼,以便于更多的同學能夠理解并加深印象。
??這是一個簡單的文件操作示例,其中包括了文件的重命名操作。具體過程如下:
-
首先創建一個名為"test.txt"的文件對象 oldFile。
-
判斷該文件對象是否存在,如果不存在,則通過調用 createNewFile() 方法創建一個新文件。
-
創建一個名為"newTest.txt"的新文件對象 newFile,同時判斷 oldFile 是否存在且 newFile 不存在。如果成立,說明可以將 oldFile 重命名為 newFile。
-
調用 renameTo() 方法實現重命名操作。
-
在 main() 方法中調用 testRename() 方法即可執行文件重命名操作。
??需要注意的是,這里的文件重命名操作是基于文件對象的,需要在同一個目錄下操作。如果需要改變目錄,可以先將原文件復制到新目錄下,然后刪除原文件。
全文小結
??本文介紹了Java中的File類,包括其基本概念、應用場景、優缺點以及常用方法的說明。通過實際案例和源碼分析,我們深入了解了File類的使用方法和內部實現機制。希望本文對初學者有所幫助。
總結
??File類是Java文件和目錄路徑名的抽象表示,它提供了一系列的方法來操作文件和目錄。在文件IO操作中,File類的使用非常廣泛,對于大文件和目錄的操作也具有較好的性能。但在多線程環境下的文件操作和對小文件的操作上,File類存在一些不足。
… …
文末
好啦,以上就是我這期的全部內容,如果有任何疑問,歡迎下方留言哦,咱們下期見。
… …
學習不分先后,知識不分多少;事無巨細,當以虛心求教;三人行,必有我師焉!!!
wished for you successed !!!
??若喜歡我,就請關注我叭。
??若對您有用,就請點贊叭。
??若有疑問,就請評論留言告訴我叭。
… …
文末
好啦,以上就是我這期的全部內容,如果有任何疑問,歡迎下方留言哦,咱們下期見。
… …
學習不分先后,知識不分多少;事無巨細,當以虛心求教;三人行,必有我師焉!!!
wished for you successed !!!
??若喜歡我,就請關注我叭。
??若對您有用,就請點贊叭。
??若有疑問,就請評論留言告訴我叭。