2013-05-22 159 views
0

我检查,甚至打印出路径和路径存在,但它无法找到该文件。我试了本地代码,它的工作原理,我不知道是什么原因(在Java中)。为什么file.exists()失败?

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

你确定该文件存在吗?,你确实意识到File构造函数不会创建一个物理文件。 – PermGenError

+1

权限设置是否正确,以便使用java执行的程序可以访问文件(如果它确实存在)? – Werzi2001

+0

想file.exists()有些替代品,有时它不会返回正确的值http://stackoverflow.com/questions/3833127/alternative-to-file-exists-in-java – user1663380

回答

0

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

test.html.html

,但会显示为

的test.html

+1

我甚至在我的文件夹目录中显示所有隐藏的文件和扩展名,所以文件名是正确的 – user1663380

0

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

请仔细检查。

+0

OP在上面注释中表示服务器是Win 2008。 –

2

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

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

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

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

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

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


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

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

如果您尝试打开从Java读取路径名(例如)记事本中,会发生什么情况。

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)); 
} 

或者复制你自己的文件。