【Java IO流】File類基礎詳解

參考筆記: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類構造方法

File3 個常用的構造方法,如下:

① 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);}}
}

輸出結果:?

🆗,以上就是本文的全部內容?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81454.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【業務領域】InfiniBand協議總結

InfiniBand協議總結 InfiniBand協議是什么?Infiniband產生的原因Mellanox公司介紹及其新聞基于TCP/IP的網絡與IB網絡的比較IB標準的優勢什么是InfiniBand網絡什么是InfiniBand架構Mellanox IB卡介紹InfiniBand速率發展介紹InfiniBand網絡主要上層協議InfiniBand管理…

蒙特卡羅方法(Monte Carlo Method)??:基于隨機采樣的數值計算與模擬技術

??核心思想?? 蒙特卡羅方法通過??隨機采樣??和??統計模擬??解決數學、物理、工程等領域的復雜問題,其核心是利用??大數定律??——當樣本量足夠大時,樣本均值會收斂于期望值。 ??關鍵特點??: ??無維度詛咒??&#x…

【資料分享】全志T536(異構多核ARMCortex-A55+玄鐵E907 RISC-V)工業核心板硬件說明書

前 言 本文為創龍科技SOM-TLT536工業核心板硬件說明書,主要提供SOM-TLT536工業核心板的產品功能特點、技術參數、引腳定義等內容,以及為用戶提供相關電路設計指導。 為便于閱讀,下表對文檔出現的部分術語進行解釋;對于廣泛認同釋義的術語,在此不做注釋。

【2025年五一數學建模競賽】A題 完整論文 模型建立與求解

目錄 2025年五一數學建模競賽 A題基于歷史數據與模式識別的道路車流量推測模型研究摘要一、問題的背景和重述1.1問題的背景1.2問題的重述 二、問題的分析三、模型假設四、符號及變量說明五、模型的建立與求解問題一:基于線性回歸的支路車流量推測問題二:…

MySQL初階:數據庫基礎,數據庫和表操作,數據庫中的數據類型

1.數據庫基礎 數據庫是一個客戶端——服務器結構的程序。 服務器是真正的主體,負責保存和管理數據,數據都存儲在硬盤上 數據庫處理的主要內容是數據的存儲,查找,修改,排序,統計等。 關系型數據庫&#…

“會話技術”——Cookie_(2/2)原理與使用細節

經過Cookie的快速入門與代碼使用。如果想深入理解Cookie的技術實現,就得去理解它的原理。 且有些時候使用Cookie,還要根據需求設置存活期限以及確定Cookie獲取范圍等其他細節。最后,我們會總結Cookie這門客戶端會話技術的作用。 一、原理 注…

DBeaver連接人大金倉數據庫V9

1、官網下載驅動jdbc 打開官網地址,找到下面的V9R1-JDBC,點擊后面的下載即可,保存到本地 2、解壓最新版的驅動程序 3、把***_JDBC文件夾內的驅動程序復制到DBeaver安裝目錄下的plugins文件夾里 4、打開dbeaver程序,增加kingbase…

服務器丟包率測試保姆級教程:從Ping到網絡打流儀實戰

測試服務器丟包率是網絡性能診斷的重要環節,丟包通常由網絡擁塞、硬件故障、配置錯誤或線路質量差導致。以下是多種測試方法的詳細步驟和工具說明: 一、基礎工具測試(無需專業設備) 1. 使用 ping 命令 命令示例: bash…

n8n 使用 AI Agent 和 MCP 社區節點

n8n 使用 AI Agent 和 MCP 社區節點 0. 前提條件1. 創建一個 "在聊天消息時" 節點2. 創建一個 "AI Agent" 節點 0. 前提條件 請參考 n8n 安裝 n8n-nodes-mcp 社區節點 安裝 MCP 社區節點。 1. 創建一個 “在聊天消息時” 節點 單擊 “測試聊天”&#xf…

抱佛腳之學SSMSpringMVC數據綁定

綁定默認數據類型 綁定簡單數據類型 綁定POJO類型 綁定包裝POJO 復雜數據綁定 綁定數組 綁定集合

解決“‘mvn‘ 不是內部或外部命令,也不是可運行的程序”錯誤

一、問題描述 當我們在Windows上運行sqlrest 工具時,提示mvn 不是內部或外部命令,也不是可運行的程序的錯誤,導致無法安裝sqlrest工具,如下圖所示: 二、問題分析 從提示中我們不難看出是由于我們缺失了【maven】環境,導致無法啟動項目;我們只需要安裝【maven】環境即可解…

DeepSeek R1:強化學習范式的推理強化模型

定位與目標 DeepSeek R1 的推出并非 DeepSeek V3 的簡單迭代,而是一次在訓練范式上的大膽探索。與傳統大模型主要依靠監督微調(SFT)后進行強化學習不同,R1 將重點放在推理能力和行為對齊上,嘗試通過大規模強化學習直接激發模型的推理潛力。其目標是利用強化學習的反饋機制,…

變轉速振動信號分析處理與故障診斷算法模塊

變轉速振動信號分析處理與故障診斷算法模塊,作為信號處理算法工具箱的主要功能模塊,形成了以變轉速振動信號分析處理與故障診斷算法模塊的經典算法模型,可應用于各類關鍵機械部件(軸承、齒輪、轉子等)的信號分析、故障…

Kafka 配置參數性能調優建議

文章目錄 1、生產者調優batch.size(重要)linger.mscompression.typeacks(重要)buffer.memorymax.in.flight.requests.per.connection(重要)message.max.bytes(重要) 2、消費者調優fe…

Redis怎么避免熱點數據問題

使用 RedisTemplate 避免熱點數據問題的解決方案、場景及示例: 1. 數據分片(Sharding) 場景:高頻讀寫的計數器(如文章閱讀量統計) ?原理?:將數據分散到多個子鍵,降低單個 Key 的壓…

B站Michale_ee——ESP32_IDF SDK——FreeRTOS_8 消息緩沖區

Message Buffer(消息緩沖區)與Stream Buffer(流數據緩沖區)類似,但有2點不同: Message Buffer每次只接收1次完整的Message;Message Buffer接收緩沖區小于1條Message大小時,會接收不到數據&#…

【計算機網絡網絡層深度解析】從IP協議到路由優化

目錄 前言技術背景與價值當前技術痛點解決方案概述目標讀者說明 一、技術原理剖析核心概念圖解核心作用講解關鍵技術模塊說明技術選型對比 二、實戰演示環境配置要求核心實驗實現實驗1:IPv6地址配置實驗2:OSPF路由配置實驗3:NAT轉換驗證 運行…

【Hive入門】Hive性能調優:小文件問題與動態分區合并策略詳解

目錄 引言 1 Hive小文件問題概述 1.1 什么是小文件問題 1.2 小文件產生的原因 2 Hive小文件合并機制 2.1 hive.merge.smallfiles參數詳解 2.2 小文件合并流程 2.3 合并策略選擇 3 動態分區與小文件問題 3.1 動態分區原理 3.2 動態分區合并策略 3.3 動態分區合并流程…

如何讓Steam下載速度解除封印?!

平時一直沒注意到家里的路由器在偷懶。最近成功榨干家里的帶寬,把平時一直20mb/s左右下載速度的路由器一番改造后成功steam下載速度穩定85Mb/s。平時一直都只發揮了他的1/3不到,真是太可惜了。 硬件 首先檢查硬件,就千兆路由器而言&#xf…

通信原理第七版與第六版的區別附pdf

介紹 我用夸克網盤分享了「通信原理 第7版》樊昌信」, 鏈接:https://pan.quark.cn/s/be7c5af4cdce 《通信原理(第7版)》是在第6版的基礎上,為了適應當前通信技術發展和教學需求,并吸取了數十所院校教師的反…