File.exists() 在文件存在时返回 false

2022-08-31 10:39:16

我遇到了一个错误,我似乎找不到任何逻辑。我有这个File对象,它是这样创建的:

File file = new File("utilities/data/someTextFile.txt");

然后我做,它返回(!?)。如果找不到该文件,我正在记录到一个文件。当我看路径时,它似乎没问题。我可以将完整路径复制粘贴到Windows中的“运行”窗口中,文件可以正常打开。file.exists()falsef.getAbsolutePath()

该文件始终存在,并且在运行应用程序期间不会删除或更改。它位于本地计算机上。

这似乎只在某些情况下发生。我可以随时重现错误,但我确信文件对象的路径不会因我为重现错误而执行的操作而更改。

什么会导致返回 false?这是否与权限或文件锁定等有关?file.exists()


答案 1

我在Windows 7上看到以下情况:

file.exists() == false
file.getAbsoluteFile().exists() == true

有问题的文件是“var\log”,绝对路径确实引用了普通子目录(不是虚拟存储)中的现有文件。从 IDE 中可以看出这一点。


答案 2

在Java中指定路径的方式似乎有所不同。

例如,如果将文件路径指定为 thenfile:/C:/DEV/test.txt

File f = new File(filename);
f.exists();

会回来。该路径可能在资源管理器或浏览器中工作,但它是 URL 而不是绝对文件路径。false

但另一方面,如果文件路径被指定为C:/DEV/test.txt

File f = new File(filename);
f.exists();

将返回,因为该路径不是 URL,但它是绝对路径。true

使用Spring框架,这正是它的作用 - 其中名称可以是URL或绝对文件路径。ResourceUtils.getFile(filename)