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
)。