Ist das ein Fehler in Java JDK?

Wenn ich eine java.lang.File-Klasse mit dem Code @ haFile file = new File("e:/");, natürlich habe ich eine Dateiklasse bekommen, die das Verzeichnis e: \ repräsentiert.

Aber wenn ich eine Dateiklasse mit Code habeFile file = new File("e:"); und ich gerade im Laufwerk E :, dann habe ich eine Dateiklasse dargestellt aktuelles Verzeichnis.

Angenommen, ich bin im Verzeichnis E: \ dir \, und dieses Verzeichnis hat eine Datei mit dem Namen Test.java. Es ist Inhalt ist:

import java.io.File;
public class Test {
    public static void main(String[] args) {
        File file = new File("e:"); 
        File[] files = file.listFiles(); 
        for(File f: files){ 
            System.out.println(f + " " + f.exists()); 
        }
    }
}

Öffnen Sie das cmd-Tool und navigieren Sie zum Verzeichnis e: \ dir. Führen Sie darin den folgenden Befehl aus:

E:\dir> javac Test.java
E:\dir> java Test

Ich habe

e:\Test.class false
e:\Test.java false

Ist das ein Java-JDK-Fehler?

Zusätzliche Informationen von @JimGarrison:

Ich habe diesen Code ausgeführt

public class Foo3
{
    public static void main(String[] args)  throws Exception
    {
        File f = new File("D:");
        System.out.println(f.getCanonicalPath());
        for (File x : f.listFiles())
            System.out.println(x + " " + x.getCanonicalPath() + " " + x.getAbsolutePath() + " " + x.exists() + " " + x.getAbsoluteFile().exists());
    }
}

in Eclipse (das auf meinem D: -Laufwerk lebt) und bekam folgende Ausgabe:

D:\dev\src\pdxep
D:\.classpath D:\dev\src\pdxep\.classpath D:\dev\src\pdxep\.classpath false true
D:\.project D:\dev\src\pdxep\.project D:\dev\src\pdxep\.project false true
D:\.settings D:\dev\src\pdxep\.settings D:\dev\src\pdxep\.settings false true
D:\gallery D:\dev\src\pdxep\gallery D:\dev\src\pdxep\gallery false true
D:\pom.xml D:\dev\src\pdxep\pom.xml D:\dev\src\pdxep\pom.xml false true
D:\src D:\dev\src\pdxep\src D:\dev\src\pdxep\src false true
D:\target D:\dev\src\pdxep\target D:\dev\src\pdxep\target false true

Was bestätigt, dass etwas komisches los ist.

JavaBug 8130462 scheint verwandt zu sein, da es mit relativen vs absoluten Pfaden speziell in Windows zu tun hat.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage