Java的File类用于路径抽象,不直接读写数据;推荐用NIO的Files/Paths;创建需调用createNewFile()/mkdirs();delete()不能删非空目录;判断用exists()、isFile()等;路径用正斜杠兼容跨平台。

Java 中的 File 类(位于 java.io 包)主要用于表示文件或目录的**路径抽象**,它本身不直接读写数据,而是提供创建、删除、判断属性、遍历等文件系统操作能力。注意:从 Java 7 开始,官方更推荐使用 java.nio.file(尤其是 Files 和 Paths)完成多数文件操作,因其更安全、功能更强、支持符号链接和原子操作。但 File 类仍广泛存在于旧代码中,理解其用法仍有实际价值。
创建文件或目录
File 对象只是路径的封装,**调用构造方法不会真正创建文件或目录**,必须显式调用对应方法:
-
创建空文件:调用
file.createNewFile()—— 返回boolean,成功返回true;若文件已存在或父目录不存在,返回false(需提前确保父目录存在,或先调用file.getParentFile().mkdirs())。 -
创建单层目录:用
dir.mkdir()—— 仅当父路径已存在时才成功。 -
创建多层目录(含父级):用
dir.mkdirs()—— 自动逐级创建缺失的上级目录,推荐用于确保路径完整。
示例:
File f = new File("data/test.txt");
f.getParentFile().mkdirs(); // 先确保 data/ 目录存在
try {
boolean created = f.createNewFile();
System.out.println("文件创建成功: " + created);
} catch (IOException e) {
e.printStackTrace();
}
删除文件或目录
File.delete() 是最常用方法,但它有重要限制:
立即学习“Java免费学习笔记(深入)”;
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 对文件:直接删除,成功返回
true。 - 对目录:**仅当目录为空时才可删除**;非空目录会静默失败(返回
false),不抛异常。 - 删除不可逆,且不走系统回收站(Windows/macOS 均为永久删除)。
如需删除非空目录,需手动递归删除内容:
public static boolean deleteDir(File dir) {
if (!dir.exists()) return true;
File[] children = dir.listFiles();
if (children != null) {
for (File child : children) {
if (child.isDirectory()) {
deleteDir(child); // 递归删子目录
} else {
child.delete(); // 删文件
}
}
}
return dir.delete(); // 最后删自身
}
判断与查询文件/目录状态
File 提供多个 isXxx() 方法快速获取元信息:
-
exists():路径是否存在(文件或目录均可)。 -
isFile()/isDirectory():严格区分类型,建议组合使用,例如if (f.exists() && f.isFile())。 -
canRead()/canWrite()/canExecute():检查当前进程是否有对应权限(受操作系统限制)。 -
length():对文件返回字节数(未打开时即能获取),对目录返回0(不可靠,勿依赖)。 -
lastModified():返回最后修改时间戳(毫秒,自 1970-01-01)。
注意:listFiles() 返回子文件/目录数组(null 表示路径不存在或非目录),适合简单遍历;但不支持过滤或深度遍历,复杂场景请改用 Files.walk()。
路径处理与跨平台兼容性
硬编码路径分隔符(如 "data\test.txt" 或 "data/test.txt")会导致跨平台问题:
- 用
File.separator替代斜杠(如"data" + File.separator + "test.txt")。 - 更简洁方式:直接使用正斜杠
/—— Java 的File类在所有主流系统(Windows/macOS/Linux)中都支持正斜杠作为分隔符,JVM 会自动适配。 - 避免绝对路径,优先用相对路径或通过
System.getProperty("user.dir")、getClass().getResource()等动态获取基路径。
小技巧:用 file.getCanonicalPath() 可展开 ..、. 并转为标准绝对路径,有助于路径比对和去重。

















