Java File 类详解
File 类是 Java 中用于表示文件和目录路径名的抽象类,位于 java.io 包中。它提供了丰富的 API,用于操作文件系统,包括创建、删除、重命名、查询文件属性等功能。
1. File 类核心知识点
(1)构造方法
File 类提供了多种构造方法,用于表示文件或目录路径:
java
// 1. 通过路径字符串创建
File file1 = new File("C:/test/file.txt");// 2. 通过父路径 + 子路径创建
File file2 = new File("C:/test", "file.txt");// 3. 通过父 File 对象 + 子路径创建
File parentDir = new File("C:/test");
File file3 = new File(parentDir, "file.txt");
(2)路径表示方式
-
绝对路径:完整路径(如
C:/test/file.txt)。 -
相对路径:相对于当前工作目录(如
./file.txt)。 -
路径分隔符:
-
Windows:
\(需转义为\\)或/。 -
Linux/Mac:
/(推荐使用/,Java 会自动适配)。
-
2. 核心方法
(1)文件/目录基本操作
| 方法 | 说明 |
|---|---|
boolean createNewFile() | 创建新文件(仅当文件不存在时) |
boolean mkdir() | 创建单级目录 |
boolean mkdirs() | 创建多级目录 |
boolean delete() | 删除文件或空目录 |
boolean renameTo(File dest) | 重命名或移动文件 |
示例:
java
File file = new File("test.txt");
if (!file.exists()) {file.createNewFile(); // 创建文件
}File dir = new File("mydir");
dir.mkdir(); // 创建目录
(2)文件属性查询
| 方法 | 说明 |
|---|---|
boolean exists() | 判断文件/目录是否存在 |
boolean isFile() | 判断是否是文件 |
boolean isDirectory() | 判断是否是目录 |
long length() | 获取文件大小(字节) |
long lastModified() | 获取最后修改时间(毫秒时间戳) |
String getName() | 获取文件名 |
String getPath() | 获取相对路径 |
String getAbsolutePath() | 获取绝对路径 |
示例:
java
File file = new File("test.txt");
System.out.println("文件大小:" + file.length() + " bytes");
System.out.println("最后修改时间:" + new Date(file.lastModified()));
(3)目录遍历
| 方法 | 说明 |
|---|---|
String[] list() | 返回目录下的文件名数组 |
File[] listFiles() | 返回目录下的 File 对象数组 |
File[] listFiles(FileFilter filter) | 过滤符合条件的文件 |
示例:
java
File dir = new File("C:/test");
// 遍历所有文件
for (File file : dir.listFiles()) {System.out.println(file.getName());
}// 仅遍历 .txt 文件
File[] txtFiles = dir.listFiles((file) -> file.getName().endsWith(".txt"));
3. 关键问题与解决方案
(1)路径问题
-
问题:Windows 和 Linux 路径分隔符不同。
-
解决:使用
File.separator(跨平台兼容):java
String path = "data" + File.separator + "file.txt"; File file = new File(path);
(2)文件删除失败
-
原因:
-
文件被占用(如未关闭
InputStream)。 -
目录非空(
delete()只能删空目录)。
-
-
解决:
java
// 递归删除非空目录 public static void deleteDir(File dir) {if (dir.isDirectory()) {for (File file : dir.listFiles()) {deleteDir(file);}}dir.delete(); }
(3)文件权限问题
-
检查权限:
java
File file = new File("test.txt"); System.out.println("可读:" + file.canRead()); System.out.println("可写:" + file.canWrite()); System.out.println("可执行:" + file.canExecute());
4. 对比 File 与 Path(NIO.2)
| 特性 | File(传统 IO) | Path(NIO.2) |
|---|---|---|
| 所属包 | java.io | java.nio.file |
| 功能 | 基础文件操作 | 更强大(符号链接、文件属性) |
| 性能 | 较低 | 更高 |
| 推荐场景 | 旧代码兼容 | 新项目优先使用 |
示例(NIO.2 替代方案):
java
Path path = Paths.get("test.txt");
Files.createFile(path); // 创建文件
Files.delete(path); // 删除文件
5. 记忆技巧
(1)核心方法分类
文件操作:createNewFile(), delete(), renameTo() 目录操作:mkdir(), mkdirs(), listFiles() 属性查询:exists(), isFile(), length()
(2)常见操作流程
"先查
exists(),再判isFile(),
创建用createNewFile(),删除要delete(),
目录遍历listFiles(),递归删除要记牢!"
6. 面试常见问题
-
File类能直接读写文件内容吗?-
不能,它只操作元数据,需配合
FileInputStream/FileWriter。
-
-
如何递归遍历目录?
-
用
listFiles()+ 递归(见上文示例)。
-
-
mkdir()和mkdirs()的区别?-
mkdir()只能创建单级目录,mkdirs()可创建多级。
-
7. 实战应用
-
文件管理工具:批量重命名、删除过期文件。
-
日志清理:定期删除旧日志文件。
-
配置文件读取:检查文件是否存在后加载。
练习:
-
写一个程序,统计某个目录下所有
.java文件的总行数。 -
实现一个递归复制目录的功能(使用
File或NIO.2)。