File类仅管理文件路径与元操作,不负责读写;创建空文件需ensure父目录存在且不覆盖;删除仅支持文件或空目录;递归删非空目录需手动实现;新项目推荐NIO.2的Files/Path。

File 类本身不负责读写内容,只管理文件或目录的路径、存在性、创建、删除等元操作。 它是 Java I/O 的“文件系统接口”,不是数据通道。真正读写内容需配合 FileInputStream、FileOutputStream、Scanner、Files(NIO.2)等类使用。
用 File 创建文件(createNewFile)
调用 createNewFile() 可在指定路径创建一个**空文件**(仅当文件不存在时才成功):
- 必须确保父目录已存在,否则抛出
IOException;可先用mkdirs()创建完整路径 - 返回
boolean:true 表示新建成功,false 表示文件已存在或创建失败 - 注意:该方法不会覆盖已有文件,也不会写入任何内容
示例:
File file = new File("data/test.txt");
if (!file.getParentFile().exists()) {
file.getParentFile().mkdirs(); // 确保目录存在
}
try {
boolean created = file.createNewFile();
if (created) {
System.out.println("文件创建成功");
} else {
System.out.println("文件已存在");
}
} catch (IOException e) {
e.printStackTrace();
}
用 File 删除文件或空目录(delete)
delete() 可删除**文件或空目录**:
立即学习“Java免费学习笔记(深入)”;
- 对非空目录直接调用会失败,返回
false - 返回
boolean:true 表示删除成功,false 表示文件不存在、无权限或目录非空 - 删除不可逆,不进回收站
示例:
File file = new File("data/test.txt");
boolean deleted = file.delete();
if (deleted) {
System.out.println("文件已删除");
} else {
System.out.println("删除失败(可能不存在或非空目录)");
}
删除非空目录(需递归)
File 不提供一键清空目录的方法,需手动递归删除:
- 先遍历子项,对每个
File递归调用删除逻辑 - 最后删除自身(必须等子项清空后才能删目录)
- 建议用
Files.walkFileTree(NIO.2)更安全简洁,但若坚持用File,可参考以下逻辑:
public static boolean deleteDir(File dir) {
if (dir.isDirectory()) {
File[] children = dir.listFiles();
if (children != null) {
for (File child : children) {
deleteDir(child); // 递归删子项
}
}
}
return dir.delete(); // 最后删自己
}
注意:File 类的局限与替代建议
File 类设计较老,部分方法(如 listFiles())在遇到权限问题或符号链接时行为不明确,且不支持原子操作、文件属性批量设置等现代需求:
- 推荐优先使用
java.nio.file.Files和Path(JDK 7+):如Files.createFile()、Files.delete()、Files.walkFileTree() - 这些方法抛出明确异常(如
FileAlreadyExistsException),支持选项参数(如REPLACE_EXISTING),更健壮易用 -
File未被废弃,但新项目建议转向 NIO.2


















