Java 文件不存在但 File.getAbsoluteFile() 存在

Java File does not exists but File.getAbsoluteFile() exists

有没有人遇到过 java.io.File 不存在但在文件实例 returns 上调用 getAbsoluteFile() 方法的文件确实存在的情况。为什么会这样?

备注

  1. 我在 Linux 加上版本为 1.7.0_95-b00
  2. 的 Oracle Java 运行时
  3. 我已经传递了一个 JVM 选项 -Duser.dir=/path/to/somewhere 启动 tomcat 实例

你可能不应该乱搞 user.dir。相反,在 启动 Tomcat.

之前切换到该目录

File.getAbsoluteFile() 假设 user.dir 是您真正所在的目录,但实际上不是。

根据您的观察,我认为 File.exists() 在操作系统级别上直接映射到 stat。而 File.getAbsoluteFile() 只是 new File(System.getProperty("user.dir"), getPath()).

user.dir为操作系统当前工作目录的假设下,这两种实现方式都是正确合理的。但是在你的情况下,它们是不同的,这个(假设的)实现可以解释你正在经历的事情。