我檢查,甚至打印出路徑和路徑存在,但它無法找到該文件。我試了本地代碼,它的工作原理,我不知道是什麼原因(在Java中)。爲什麼file.exists()失敗?
filepath = "C:/FolderA/test.html";
File f1 = new File(filepath)
if (!f1.exists()) {
System.out.println("File does not exist");
}
我檢查,甚至打印出路徑和路徑存在,但它無法找到該文件。我試了本地代碼,它的工作原理,我不知道是什麼原因(在Java中)。爲什麼file.exists()失敗?
filepath = "C:/FolderA/test.html";
File f1 = new File(filepath)
if (!f1.exists()) {
System.out.println("File does not exist");
}
您的代碼非常好,您需要檢查您的文件。確保你的文件實際上是test.html。有時文件可能會以擴展名命名,但實際上是不同類型的文件。例如您的文件實際上可能是
test.html.html
,但會顯示爲
的test.html
我甚至在我的文件夾目錄中顯示所有隱藏的文件和擴展名,所以文件名是正確的 – user1663380
如果你測試了你本地計算機與Windows,請注意文件名不區分大小寫。如果您的服務器基於Linux/Unix平臺,則文件名將區分大小寫。
請仔細檢查。
OP在上面註釋中表示服務器是Win 2008。 –
我能想到的三種可能的解釋你所看到的:
這可能是一個壞的捷徑。 javadoc exists()
說:
測試是否存在由此抽象路徑名錶示的文件或目錄。
如果路徑名是斷開的符號鏈接的名稱,則該路徑表示的文件或目錄不存在。 (如果你試圖用Java打開它,你會得到一個IOException。)
該應用程序沒有足夠的權限來查看該文件。例如,如果FolderA
上的權限是程序無法讀取的權限,則exists()
將不得不返回整個路徑的false
。
不知何故,您已經設法將一個時髦的字符存入文件系統中存儲的文件的路徑名,或者程序中的Java字符串文字。在不同的西方字母表中有一些Unicode字符,看起來像拉丁字母(a-z,A-Z) ...但不是。根據用於顯示各個字符的字形,這些可能很難找到。
前兩個理論可以通過檢查所涉及的文件和目錄進行測試。
第三個將需要檢查您的源代碼和目錄列表使用一些工具,可以呈現各自的字符爲十六進制。
如果您嘗試打開從Java讀取路徑名(例如)記事本中,會發生什麼情況。
一個有趣的傢伙可能在文件名(或目錄名)中使用了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));
}
或者複製你自己的文件。
你確定該文件存在嗎?,你確實意識到File構造函數不會創建一個物理文件。 – PermGenError
權限設置是否正確,以便使用java執行的程序可以訪問文件(如果它確實存在)? – Werzi2001
想file.exists()有些替代品,有時它不會返回正確的值http://stackoverflow.com/questions/3833127/alternative-to-file-exists-in-java – user1663380