2014-04-25 36 views
2

當我創建像爲什麼isDirectory對於File(「c:」)是真的?

File f = new File("c:") 

一個文件對象,然後調用該方法isDirectory(),它返回true這是爲什麼?

該程序假設顯示該目錄下的所有文件,並且在使用「c:」的情況下工作正常。它不訪問「c:\」,不是訪問主路徑,而是訪問程序執行的目錄。我真的不明白。

+4

你如何得出你的結論?什麼f.getAbsolutePath()打印?對我來說,isDirectory()在根上返回true是完全合乎邏輯的。 – Gimby

+0

如果它的目標是訪問c:\爲什麼你使用c:而不是c:\? –

+0

@Gimby是的。但它不顯示根目錄中的文件。它顯示程序執行目錄中的文件。這是一個有趣的問題.... – iHank

回答

6

在Windows中,當前工作目錄被保持爲每個驅動器(A:,B:C:等)。

當您在未指定目錄的情況下使用驅動器時,您指的是該驅動器的當前工作目錄。

C: refers to the current working directory of drive C: 
C:\ refers to the root directory of drive C: 

就你而言,C:的當前工作目錄是程序文件所在的目錄。

-1

嘗試用C:\代替。

File f = new File("C:\\"); 
System.out.println(f.getAbsolutePath()); 
System.out.println(f.isDirectory()); 
System.out.println(f.isFile()); 

輸出:

C:\ 
true 
false 
0

這是一個有趣的問題。我會盡力對您的問題展開(問題應該總是與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:情況而變得陌生。

相關問題