首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当文件存在时,File.exists()返回false

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

Stack Overflow用户
提问于 2009-05-28 17:10:15
回答 16查看 103K关注 0票数 96

我遇到了一个bug,我似乎找不到背后的逻辑。我有这个File对象,它是这样创建的:

代码语言:javascript
复制
File file = new File("utilities/data/someTextFile.txt");

然后我执行file.exists(),它返回false (!?)。如果没有找到该文件,我会将f.getAbsolutePath()记录到一个文件中。当我看着这条路时,它似乎是可以的。我可以将完整的路径复制粘贴到Windows中的"Run"-window中,文件可以很好地打开。

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

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

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

EN

回答 16

Stack Overflow用户

发布于 2010-07-08 06:21:09

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

代码语言:javascript
复制
file.exists() == false
file.getAbsoluteFile().exists() == true

有问题的文件是"var\log",绝对路径指的是普通子目录(而不是虚拟存储)中的现有文件。这是从IDE中看到的。

票数 45
EN

Stack Overflow用户

发布于 2012-02-15 04:36:21

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

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

代码语言:javascript
复制
File f = new File(filename);
f.exists();

将返回false。该路径可能在资源管理器或浏览器中有效,但它是一个URL,而不是绝对文件路径。

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

代码语言:javascript
复制
File f = new File(filename);
f.exists();

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

对于Spring Framework,这正是ResourceUtils.getFile(filename)所做的事情--名称可以是URL,也可以是绝对文件路径。

票数 17
EN

Stack Overflow用户

发布于 2009-05-28 09:20:08

如果进程没有权限判断文件是否存在,它将返回false。可能可以打开一个文件,但不能通过正常方法判断该文件是否存在。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/919918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档