Java—— File詳解

說明

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

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

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

相關文章

【數字圖像處理】半開卷復習提綱

1:要求 2張A4紙以內,正反面均可寫 (不過博主由于墨水浸到背面了,采用了把2張單面通過雙面膠粘起來的方法,結果考前半個小時都在用這個難用的雙面膠。。。) 2:提綱內容 3:提示 考的…

Neovim 如何安裝和配置縮進標識插件 indent-blankline.nvim

Neovim 0.9 以?lazy.nvim?為核心的現代化配置指南 一次性搞定插件管理、UI 優化與高效行跳轉 適用平臺:Linux/macOS/WSL/Windows (Neovim ≥?0.9) 目錄 為什么選?lazy.nvim安裝與初始化 2.1 創建配置目錄 2.2 克隆?lazy.nvi…

VulnHub | Breach - 1

🌟 關注這個靶場的其它相關筆記:[網安靶場] 紅隊綜合滲透靶場 —— VulnHub 靶場筆記合集 Breach: 1 ~ VulnHubBreach: 1, made by mrb3n. Download & walkthrough links are available.https://vulnhub.com/entry/breach-1,152/ 0x01:…

城市綜合管廊監測與維護一體化解決方案

一、 方案概述 城市綜合管廊監測主要源于現代城市對地下管線管理的迫切需求。隨著城市化進程的加快,地下管線作為城市的“生命線”,其重要性日益凸顯。傳統的地下管線管理方式存在分散、低效、易產生信息孤島和管理盲區等問題,已無法滿足現代…

【iOS】alloc的實際流程

目錄 前言 為什么不按源碼流程調用? alloc的調用流程 前言 在之前的博客中我們有學習到過alloc的底層原理,沿著源碼一步步找到了alloc的調用鏈——alloc—>_objc_rootAlloc—>callAlloc—>_objc_rootAllocWithZone—>_class_createInstan…

MySQL 故障排查與生產環境優化

目錄 一、前置知識點 MySQL的運行原理 1. 客戶端連接 2. SQL 解析與優化 3. 存儲引擎處理 4. 日志與持久化 二、MySQL 單實例故障排查 (1)故障現象1 (2)故障現象2 (3)故障現象3 (4&am…

C++學習:六個月從基礎到就業——C++20:模塊(Modules)與其他特性

C學習:六個月從基礎到就業——C20:模塊(Modules)與其他特性 本文是我C學習之旅系列的第五十三篇技術文章,也是第三階段"現代C特性"的第十五篇,深入探討C20引入的模塊(Modules)系統及其他重要特性。查看完整系列目錄了解…

Vue百日學習計劃Day36-42天詳細計劃-Gemini版

總目標: 在 Day 36-42 理解組件化開發的思想,熟練掌握 Vue 組件的注冊、Props、Events、v-model、Slots、Provide/Inject 等核心概念和實踐,能夠構建可復用和易于維護的組件結構。 所需資源: Vue 3 官方文檔 (組件基礎): https://cn.vuejs.org/guide/es…

深入解析Spring Boot與Kafka集成:構建高效消息驅動微服務

深入解析Spring Boot與Kafka集成:構建高效消息驅動微服務 引言 在現代微服務架構中,消息隊列扮演著至關重要的角色,而Apache Kafka憑借其高吞吐量、低延遲和可擴展性,成為了許多企業的首選。本文將詳細介紹如何在Spring Boot應用…

谷歌 NotebookLM 即將推出 Sparks 視頻概覽:Gemini 與 Deep Research 加持,可生成 1 - 3 分鐘 AI 視頻

近期,谷歌旗下的 NotebookLM 即將推出一項令人矚目的新功能 ——Sparks 視頻概覽。這一功能借助 Gemini 與 Deep Research 的強大能力,能夠生成 1 - 3 分鐘的 AI 視頻,為用戶帶來全新的內容創作與信息獲取體驗。 NotebookLM:AI 筆…

第十六屆藍橋杯復盤

文章目錄 1.數位倍數2.IPv63.變換數組4.最大數字5.小說6.01串7.甘蔗8.原料采購 省賽過去一段時間了,現在復盤下,省賽報完名后一直沒準備所以沒打算參賽,直到比賽前兩天才決定參加,賽前兩天匆匆忙忙下載安裝了比賽要用的編譯器ecli…

Manus AI 突破多語言手寫識別技術壁壘:創新架構、算法與應用解析

在人工智能領域,手寫識別技術作為連接人類自然書寫與數字世界的橋梁,一直備受關注。然而,多語言手寫識別面臨諸多技術挑戰,如語言多樣性、書寫風格差異、數據稀缺性等。Manus AI 作為該領域的領軍者,通過一系列創新技術…

25考研經驗貼(11408)

聲明:以下內容都僅代表個人觀點 數學一(130) 25考研數學一難度介紹:今年數學一整體不難,尤其是選填部分,大題的二型線面和概率論大題個人感覺比較奇怪,其他大題還是比較容易的。.26如何準備&a…

嵌入式軟件--stm32 DAY 6 USART串口通訊(下)

1.寄存器輪詢_收發字符串 通過寄存器輪詢方式實現了收發單個字節之后,我們趁熱打鐵,爭上游,進階到字符串。字符串就是多個字符。很明顯可以循環收發單個字節實現。 然后就是接收字符串。如果接受單個字符的函數放在while里,它也可…

QT使用QXlsx讀取excel表格中的圖片

前言 讀取excel表格中的圖片的需求比較小眾,QXlsx可以操作excel文檔,進行圖片讀取、插入操作,本文主要分享單獨提取圖片和遍歷表格提取文字和圖片。 源碼下載 github 開發環境準備 把下載的代碼中的QXlsx目錄,整個拷貝到所創建…

抽獎相關功能測試思路

1. 抽獎系統功能測試用例設計(登錄 每日3次 中獎40% 道具兌換碼) ? 功能點分析 必須登錄后才能抽獎每天最多抽獎3次抽獎有 40% 概率中獎中獎返回兌換碼 ? 測試用例設計 編號 用例描述 前置條件 操作 預期結果 TC01 未登錄時抽獎 未登錄 …

Unity editor文件數UI(支持勾選框)

unity editor文件數(支持勾選框) 使用的時候new一個box即可 using Sirenix.OdinInspector; using Sirenix.OdinInspector.Editor; using System; using System.Collections; using System.Collections.Generic; using UnityEngine;[Serializable] publ…

RabbitMQ通信模式(Simplest)Python示例

RabbitMQ通信模式-Python示例 0.RabbitMQ官網通信模式1.Simplest(簡單)模式1.1 發送端1.2 接收端 0.RabbitMQ官網通信模式 1.Simplest(簡單)模式 1.1 發送端 # -*- coding: utf-8 -*- """ Author: xxx date: 2025/5/19 11:30 Description: Simaple簡單模…

隨筆20250519 Async+ThreadPoolTaskExecutor?定義線程池進階實戰

1.ThreadPoolTaskExecutor線程池 有哪?個重要參數, 什么時候會創建線程 1.核心綫程數 查看核心綫程數目是否已經滿,未滿 創建一條綫程 執行任務,已滿負責執行第二部 2.阻塞隊列 查看阻塞隊列是否已經滿,未滿將任務加入阻塞隊列&…

YOLO11解決方案之實例分割與跟蹤探索

概述 Ultralytics提供了一系列的解決方案,利用YOLO11解決現實世界的問題,包括物體計數、模糊處理、熱力圖、安防系統、速度估計、物體追蹤等多個方面的應用。 實例分割是一項計算機視覺任務,涉及在像素級別識別和勾勒圖像中的單個對象。與只按類別對像素進行分類的語義分割…