2013-05-22 205 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)); 
} 

或者複製你自己的文件。