這些彼此相等:爲什麼新文件(「c:\ a」)不等於新文件(「c:\ a」,「\」)?
new File("c:\\a")
new File("c:\\a\\")
new File("c:\\a","")
new File("c:\\a\\","")
但 new File("c:\\a","\\")
不等於他們
但 new File("c:\\a","\\b")
等於new File("c:\\a","b")
爲什麼呢?
這些彼此相等:爲什麼新文件(「c:\ a」)不等於新文件(「c:\ a」,「\」)?
new File("c:\\a")
new File("c:\\a\\")
new File("c:\\a","")
new File("c:\\a\\","")
但 new File("c:\\a","\\")
不等於他們
但 new File("c:\\a","\\b")
等於new File("c:\\a","b")
爲什麼呢?
equals()
- Compares two abstract pathnames lexicographically。
以下印刷清楚地表明,這有不一樣的路徑。
System.out.println(new File("c:\\a").getAbsolutePath());
System.out.println(new File("c:\\a\\").getAbsolutePath());
System.out.println(new File("c:\\a","").getAbsolutePath());
System.out.println(new File("c:\\a\\","").getAbsolutePath());
System.out.println(new File("c:\\a","\\").getAbsolutePath());
System.out.println(new File("c:\\a","\\b").getAbsolutePath());
System.out.println(new File("c:\\a","b").getAbsolutePath());
輸出
c:\a
c:\a
c:\a
c:\a
c:\a\
c:\a\b
c:\a\b
我對Java一無所知,但不是因爲「c:\ a」是一個文件,而「\」是一個目錄?
JavaDocs對於java.io.File
應該說清楚。
File(File parent, String child)
Creates a new File instance from a parent abstract pathname and a child pathname string.
File(String pathname)
Creates a new File instance by converting the given pathname string into an abstract pathname.
對於Java,至少在不包含與JDK7的新IO的東西,一個目錄設置爲true isDirectory標誌的File對象。然而,javadoc解釋說,文件是用LEXICOGRRAPHICALLY來比較的,這意味着只要它們的路徑相同,文件就會相同。當然,您可以通過實現自己的比較器來覆蓋該行爲。 –