Java文件不存在但存在File.getAbsoluteFile()
有没有人遇到过这种情况:java.io.File
不存在,但文件实例调用getAbsoluteFile()
方法返回一个确实存在的文件。为什么会发生?Java文件不存在但存在File.getAbsoluteFile()
注
- 我在Linux上加上甲骨文的Java运行时与版本
1.7.0_95-b00
- 我通过在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
是操作系统的当前工作目录,这两个实现是正确和合理的。但就你而言,它们有所不同,而这(假定的)实现可以解释你正在经历的事情。
这是否意味着'java.io.File中有一些内部状态'可能不会与'System'的'user.dir'属性同步? –
我更新了我的答案。 –
够公平的。 File.exists最后依赖于'public native int getBooleanAttributes0(File f);'这是一个本地调用的返回结果。 –
这是否仅在调试器手表中发生?如果您在'try'块中调用这些方法并打印结果会怎么样? –
它发生在程序和调试器手表 –
这是仅在tomcat中发生,还是可以通过简单的独立应用程序([mcve])重现相同情况? –