一、前言
做 Java 开发时,本地文件、文件夹读写、目录遍历是高频需求。java.io.File 是 Java 专门用来管理文件 / 文件夹路径的核心类,它只负责文件元信息操作,不具备文件内容读写能力,文件内容读取写入需要配合 IO 流。 本文整合 File 全部 API、路径规则、常用实战案例、递归遍历代码以及开发踩坑点,零基础也能看懂,可直接复制使用。
二、File 基础:对象创建与路径规则
1、三种构造方法
File 对象仅仅代表一个路径,对应的文件 / 文件夹可以真实存在,也可以不存在。
// 方式1:传入完整路径字符串
File f1 = new File("D:\\demo\\test.txt");
// 方式2:父路径字符串 + 子文件名
File f2 = new File("D:\\demo", "test.txt");
// 方式3:父File对象 + 子文件名(推荐,路径拼接更稳定)
File parent = new File("D:\\demo");
File f3 = new File(parent, "test.txt");
2、路径两种写法
- Windows 路径转义
\\是转义反斜杠;也可以直接写/,无需转义,跨平台兼容性更好。 - 绝对路径 从磁盘根目录完整路径,例如
D:/demo/test.txt,固定指向某一处文件。 - 相对路径 相对于当前项目根目录,移植性更强,直接写文件名即可。
| 方法 | 功能说明 |
|---|---|
exists() | 判断当前路径的文件 / 文件夹是否存在 |
isFile() | 判断是否为普通文件(必须存在才返回 true) |
isDirectory() | 判断是否为文件夹(必须存在才返回 true) |
四、文件 / 文件夹 创建 & 删除 API
创建方法区分(极易混淆)
createNewFile():只创建文件,不能创建文件夹;文件已存在返回 falsemkdir():仅创建单级文件夹,多级路径创建失败mkdirs():创建多级文件夹,日常开发首选
删除方法
delete():删除文件 / 空文件夹;无法直接删除内部带有文件的文件夹。
// 创建文件
File file = new File("demo.txt");
file.createNewFile();
// 创建多级文件夹
File dir = new File("a/b/c");
dir.mkdirs();
// 删除文件
file.delete();
五、文件基础信息获取 API
length():获取文件字节大小,文件夹调用返回 0getName():获取文件 / 文件夹名称getAbsolutePath():获取完整绝对路径getPath():获取构造方法传入的原始路径
六、目录遍历核心 listFiles ()
方法作用
File[] listFiles() 获取当前文件夹下一级所有文件 / 文件夹 File 对象数组
关键避坑规则(重点)
- 路径不存在、路径是文件、无访问权限 → 返回
null,遍历前必须判空,否则空指针报错 - 空文件夹 → 返回长度为 0 的空数组,不会返回 null
拓展递归练习:不死神兔(斐波那契)
递归基础算法题,巩固递归思想
// 获取第n个月兔子对数
public static int getRabbitNum(int month){
if(month == 1 || month == 2){
return 1;
}
return getRabbitNum(month - 1) + getRabbitNum(month - 2);
}
八、开发避坑总结(面试高频)
- 路径推荐使用
/,避免\\转义书写繁琐; - 使用
listFiles()前必须判断是否为 null,防止空指针异常; delete()不能直接删除存有文件的文件夹,只能递归清空后删除;- 创建 API 不可混用:
createNewFile()创建文件,mkdirs()创建文件夹; - 递归遍历层级过深会出现栈溢出,超大目录建议使用 NIO 非递归遍历;
- File 类仅操作文件路径、属性,不能读写文件内容,文件读写需要 IO 字符 / 字节流。
九、文末总结
File 是 Java IO 体系的前置基础,日常文件上传、日志处理、本地资源读取都离不开它。掌握构造方法、路径规则、增删 API 后,递归遍历是核心难点。下一篇我会分享 Java IO 字节流、字符流文件读写教程。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2601_96029214/article/details/163000546




