应先用exists()确认路径存在,再用isFile()或isDirectory()判断类型;二者互斥且仅在路径存在时有效;推荐使用Files.isRegularFile()和Files.isDirectory()替代。

直接看 isFile() 和 isDirectory() 的返回值就行,但必须先确认路径存在,否则两个方法都返回 false。
先检查路径是否存在
exists() 是判断前提。如果路径根本不存在,isFile() 和 isDirectory() 都会返回 false,无法区分类型。
- 用
file.exists()判断路径是否真实存在于文件系统中 - 若返回
false,说明路径无效,后续类型判断无意义 - 常见原因包括:拼写错误、父目录未创建、权限不足导致不可见
再调用类型判断方法
路径存在后,才能安全使用类型判断方法:
-
file.isFile()返回true→ 是普通文件(不含目录、符号链接、设备文件等) -
file.isDirectory()返回true→ 是目录 - 二者互斥:同一路径不会同时为
true - 注意:
canRead()或canWrite()是权限方法,不能代替类型判断
推荐用 Files 工具类(Java 7+)
java.nio.file.Files 比 File 类更健壮,尤其对符号链接等边界情况处理更明确:
-
Files.isRegularFile(path)→ 对应isFile() -
Files.isDirectory(path)→ 对应isDirectory() - 支持
LinkOption.NOFOLLOW_LINKS,可避免自动解析符号链接带来的误判 - 底层基于
Path,语义更清晰,异常处理也更规范
典型安全写法示例
不建议单独调用 isFile() 或 isDirectory(),应组合使用:
if (file.exists()) {
if (file.isFile()) {
System.out.println("是文件");
} else if (file.isDirectory()) {
System.out.println("是目录");
}
} else {
System.out.println("路径不存在");
}
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











