为什么file.exists()失败?

时间:2013-05-22 13:32:56

标签: java

我检查了甚至打印出路径并且路径存在,但它找不到文件。我在本地尝试了代码并且它有效,但我不确定原因是什么(在Java中)。

filepath = "C:/FolderA/test.html";
File f1 = new File(filepath)
if (!f1.exists()) {
    System.out.println("File does not exist");
}

4 个答案:

答案 0 :(得分:2)

我可以想到你所看到的三种可能的解释:

  1. 这可能是一个破碎的捷径。 exists()的javadoc说:

      

    测试此抽象路径名表示的文件或目录是否存在。

    如果路径名是损坏的符号链接的名称,则该路径表示的文件或目录不存在。 (如果你试图用Java打开它,你会得到一个IOException。)

  2. 应用程序没有足够的权限查看该文件。例如,如果FolderA上的权限导致程序无法读取,则exists()必须返回false整个路径。

  3. 不知何故,您已经设法将一个时髦的角色放入存储在文件系统中的文件的路径名,或者程序中的Java字符串文字。在不同的西方字母表中有某些Unicode字符看起来像拉丁字母(a-z,A-Z)......但不是。根据用于显示相应字符的字形,这些很难被发现。


  4. 可以通过检查所涉及的文件和目录来测试前两个理论。

    第三个需要使用一些可以将相应字符呈现为十六进制的工具来检查您的源代码和目录列表。

    如果你尝试从Java和(比如)记事本打开路径名(用于阅读),会发生什么情况也是值得的。

答案 1 :(得分:0)

您的代码非常好,您需要检查您的文件。确保您的文件实际上是test.html。有时文件可能以扩展名命名,但实际上是不同类型的文件。例如,您的文件实际上可能是

  

test.html.html

但会显示为

  

的test.html

答案 2 :(得分:0)

如果您在使用Windows的本地计算机上进行了测试,请注意文件名不区分大小写。如果您的服务器基于Linux / Unix平台,则文件名将区分大小写。

请仔细检查一下。

答案 3 :(得分:0)

一个有趣的人可能在文件名(或目录名)中使用了Cyrillic个字母e?)。因此,请在Java中列出文件:

while (file.getPath().length() > 3 && !file.exists()) {
    System.out.println("No such file: " + file.getPath());
    file = file.getParentFile();
    if (file == null) {
        break;
    }
}

if (file != null) {
    String[] children = file.list();
    System.out.println("Siblings: " + Arrays.toString(children));
}

或者在那里复制你自己的文件。