我遇到了一个bug,我似乎找不到背后的逻辑。我有这个File对象,它是这样创建的:
File file = new File("utilities/data/someTextFile.txt");
然后我执行file.exists()
,它返回false
(!?)。如果没有找到该文件,我会将f.getAbsolutePath()
记录到一个文件中。当我看着这条路时,它似乎是可以的。我可以将完整的路径复制粘贴到Windows中的"Run"-window中,文件可以很好地打开。
该文件始终存在,并且在我的应用程序运行期间不会被删除或更改。它位于本地机器上。
这似乎只在某些情况下才会发生。我可以在任何时候重现错误,但我确信文件对象的路径不会因为我为重现错误而执行的操作而改变。
什么会导致file.exists()
返回false?这是否与权限或文件锁定等有关?
发布于 2010-07-08 06:21:09
我在Windows 7上看到以下情况:
file.exists() == false
file.getAbsoluteFile().exists() == true
有问题的文件是"var\log",绝对路径指的是普通子目录(而不是虚拟存储)中的现有文件。这是从IDE中看到的。
发布于 2012-02-15 04:36:21
似乎在Java中指定路径的方式有所不同。
例如,如果文件路径指定为file:/C:/DEV/test.txt
,则
File f = new File(filename);
f.exists();
将返回false
。该路径可能在资源管理器或浏览器中有效,但它是一个URL,而不是绝对文件路径。
但另一方面,如果文件路径指定为C:/DEV/test.txt
,则
File f = new File(filename);
f.exists();
将返回true
,因为路径不是URL,但它是绝对路径。
对于Spring Framework,这正是ResourceUtils.getFile(filename)
所做的事情--名称可以是URL,也可以是绝对文件路径。
发布于 2009-05-28 09:20:08
如果进程没有权限判断文件是否存在,它将返回false。可能可以打开一个文件,但不能通过正常方法判断该文件是否存在。
https://stackoverflow.com/questions/919918
复制相似问题