【问题标题】:java.io.File.exists() fails on Windows 7java.io.File.exists() 在 Windows 7 上失败
【发布时间】:2012-01-16 07:10:05
【问题描述】:

这太疯狂了。 java 程序以最简单的方式失败。它从系统属性中查找位于${user.home} 的配置文件。我记录了程序在哪里寻找文件,并验证了它正在寻找的文件确实存在并且它在正确的位置。但是当程序运行时,找不到配置文件(先用`File.exists()检查)。这是在运行 Windows 7 的 PC 上。在运行 Windows 7 或 XP 的许多其他 PC 上运行相同的程序时不会发生这种情况。

起初,我认为我使用 XP 机器上的远程桌面连接来运行这个程序这一事实可能很重要。在 .NET file.exists() 上有一些与此相关的谷歌点击。但是,当我的同事直接访问有问题的 PC 并尝试在本地运行程序时,也会发生同样的事情。

我被难住了。有人有什么想法吗?

代码如下:

static private File configDir = new File(System.getProperty("user.home"));
File configFile = new File(configDir, fileName);
log.debug("config file directory is " + configDir);
if (configFile.exists()) {
...
} else {
   log.info("Override Configuration from File System not found.");
}

【问题讨论】:

  • 我的第一直觉是你有文件权限问题。文件有哪些权限,程序在运行时有哪些权限?
  • 只是一个愚蠢的想法:您是否检查过程序在哪个用户下运行(以及设置文件是否在那里)?我注意到 7 的第一件事是主目录的位置略有不同。
  • Windows 7 上的文件权限?我们以用户身份登录,在用户自己的主目录中。我不认为可能是这样。我知道 7 下主目录的不同文件位置,并已考虑到这一点。日志语句告诉我,我有正确的主目录并且正在寻找正确的位置。
  • 是的,Windows 7 上的文件权限。:) 你没听说过 UAC 吗?甚至管理员在 Windows 7 上的权限也受到限制;非管理员用户的权限受到严格限制。 configDir 在哪里确切地在看? (您发布了除特定路径之外的所有内容。)
  • 在 Win7 上,C:\Users\<userid> 下有多个文件夹级别,即使该用户也无法访问其中的许多级别。例如,查看隐藏的 AppData 文件夹,以及它下面的 LocalLocalLowRoaming 文件夹。您应该查看 MSDN 以获取有关 SHGetFolderLocation 的信息(Vista 及更高版本已弃用 - 请参阅 Vista/Win7 首选功能的链接)以了解实际文件夹的位置和用途。

标签: java file windows-7


【解决方案1】:

我在编写面试解决方案时遇到了这个问题,结果是因为文件实际上被调用了

foo.txt.txt

但显示为:

foo.txt

我强烈怀疑这或者上面的 cmets 中提到的权限问题导致了这个问题。但是,如果您可以以执行 Java 程序的同一用户身份打开文件,则可以排除权限问题。在 Windows 中,您可以单击显示文件扩展名的复选框。这是一个 link,它演示了如何切换此行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 2012-11-02
    • 1970-01-01
    • 2011-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多