当前位置: 首页 > news >正文

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

相关文章:

  • VTK|箱体切割器
  • 【git进阶】git rebase(变基)
  • 前端子项目打包集成主项目实战指南
  • SOC-ESP32S3部分:1、ESP32开发IDF-5.4环境搭建
  • RV1126多线程获取SMARTP的GOP模式数据和普通GOP模式数据
  • 第二届parloo杯的RSA_Quartic_Quandary
  • 系统架构设计师考前冲刺笔记-第3章-软件架构设计
  • Pod 节点数量
  • 【Redis】快速列表结构
  • 没有公网ip怎么端口映射外网访问?使用内网穿透可以解决
  • upload-labs通关笔记-第12关 文件上传之白名单GET法
  • 氩气模块压力异常时的维修方法,要注意仪器的安全操作规范,避免对仪器造成二次损坏
  • Python训练营打卡 Day30
  • JavaWeb:Spring配置文件( @ConfigurationProperties)
  • centos把jar包配置成服务并设置开机自启
  • AIGC工具平台-卡通图片2D转绘3D
  • Docker构建 Dify 应用定时任务助手
  • linux系统双击EXE运行,在统信UOS上无缝运行EXE!统信Windows应用兼容引擎V3来了
  • PyTorch模型保存方式
  • 【软考-架构】15、软件架构的演化和维护
  • 这位中国电影早期的全能奇才,90年前唱响国歌
  • 山东茌平民企巨头实控人省外再出手:斥资16亿拿下山西一宗探矿权
  • 博物馆书单|走进博物馆,去体验一场与文明的对话
  • 人民网:激发博物馆创新活力,让“过去”拥有“未来”
  • 讲座预告|以危机为视角解读全球治理
  • 澳大利亚首例“漂绿”诉讼开庭:能源巨头因“碳中和”承诺遭起诉