File.exists()仅判断路径是否存在,不保证可读写或区分文件/目录类型;需配合isFile()、isDirectory()及canRead()/canWrite()等方法综合校验权限与类型。

用 File.exists() 就能判断,但它只告诉你“路径有没有”,不保证你能读、写或访问。
基础用法:exists() 是最直接的方式
创建 File 对象后调用 exists(),返回 true 表示该路径在文件系统中存在(无论是文件还是目录):
-
new File("data.txt").exists()→ 检查文件是否存在 -
new File("config").exists()→ 检查目录是否存在 -
new File("missing.log").exists()→ 不存在就返回false
但 exists() 不能代替类型判断
它无法区分是文件还是目录。如果需要明确类型,得配合 isFile() 或 isDirectory():
-
file.exists() && file.isFile()→ 确认是存在的普通文件 -
file.exists() && file.isDirectory()→ 确认是存在的目录 - 单独调用
isFile()或isDirectory()在路径不存在时一律返回false
实际使用要注意权限和环境限制
exists() 返回 true 不代表你一定能操作它:
- Linux 容器或 Windows 网络驱动器中,路径存在但无读权限 →
canRead()可能为false - Android API 29+ 对私有目录外的路径限制变严,
exists()可能静默返回false - 符号链接(symlink)存在,但目标被删了 →
exists()仍返回true,而Files.exists(path, LinkOption.NOFOLLOW_LINKS)更精准
写入前别只靠 exists(),还要检查父目录可写
想创建新文件,不仅要确认目标路径不存在,更要确保父目录允许写入:
-
file.getParentFile().canWrite()比file.exists()更关键 -
mkdirs()创建多级目录时可能部分失败(比如某一级是文件而非目录),务必检查返回值:if (!dir.mkdirs()) { /* 处理创建失败 */ } -
createNewFile()只在文件不存在且父目录可写时才成功;已存在或权限不足都会返回false
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











