说明

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解决现实世界的问题,包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 实例分割是一项计算机视觉任务,涉及在像素级别识别和勾勒图像中的单个对象。与只按类别对像素进行分类的语义分割…