當我創建像爲什麼isDirectory對於File(「c:」)是真的?
File f = new File("c:")
一個文件對象,然後調用該方法isDirectory()
,它返回true
。 這是爲什麼?
該程序假設顯示該目錄下的所有文件,並且在使用「c:」的情況下工作正常。它不訪問「c:\」,不是訪問主路徑,而是訪問程序執行的目錄。我真的不明白。
當我創建像爲什麼isDirectory對於File(「c:」)是真的?
File f = new File("c:")
一個文件對象,然後調用該方法isDirectory()
,它返回true
。 這是爲什麼?
該程序假設顯示該目錄下的所有文件,並且在使用「c:」的情況下工作正常。它不訪問「c:\」,不是訪問主路徑,而是訪問程序執行的目錄。我真的不明白。
在Windows中,當前工作目錄被保持爲每個驅動器(A:,B:C:等)。
當您在未指定目錄的情況下使用驅動器時,您指的是該驅動器的當前工作目錄。
C: refers to the current working directory of drive C:
C:\ refers to the root directory of drive C:
就你而言,C:的當前工作目錄是程序文件所在的目錄。
嘗試用C:\
代替。
File f = new File("C:\\");
System.out.println(f.getAbsolutePath());
System.out.println(f.isDirectory());
System.out.println(f.isFile());
輸出:
C:\
true
false
這是一個有趣的問題。我會盡力對您的問題展開(問題應該總是與SSCCE儘可能)...
拿這個代碼,例如:
public class Main{
public static void main(String[] args){
File f = new File("C:\\");
System.out.println("C:\\ is directory: " + f.isDirectory());
System.out.println("C:\\ exists: " + f.exists());
System.out.println("C:\\ absolute path: " + f.getAbsolutePath());
System.out.println();
f = new File("C:");
System.out.println("C: is directory: " + f.isDirectory());
System.out.println("C: exists: " + f.exists());
System.out.println("C: absolute path: " + f.getAbsolutePath());
System.out.println();
f = new File("X:");
System.out.println("X: is directory: " + f.isDirectory());
System.out.println("X: exists: " + f.exists());
System.out.println("X: absolute path: " + f.getAbsolutePath());
System.out.println();
}
}
(請注意,我做有一個C:驅動器,我沒有一個X:驅動器) 這導致了這個輸出:
C:\是目錄:真 C:\存在:真 C:\絕對路徑:C:\
C:是目錄:真 C:存在:真 C:絕對路徑:C:\用戶\ kworkman \桌面\測試
X:是目錄:假 X:存在:假 X:絕對路徑:X:
所以它似乎正確地處理了C:\,但是C:本身導致了一個實際上不存在的目錄的奇怪輸出。這是因爲它似乎正確處理X:情況而變得陌生。
你如何得出你的結論?什麼f.getAbsolutePath()打印?對我來說,isDirectory()在根上返回true是完全合乎邏輯的。 – Gimby
如果它的目標是訪問c:\爲什麼你使用c:而不是c:\? –
@Gimby是的。但它不顯示根目錄中的文件。它顯示程序執行目錄中的文件。這是一個有趣的問題.... – iHank