¿Es esto un error en Java JDK?
Cuando obtuve una clase java.lang.File con el códigoFile file = new File("e:/");
, por supuesto, obtuve una clase de archivo que representaba el directorio e: \.
Pero si tengo una clase de archivo con códigoFile file = new File("e:");
y solo en la unidad E :, luego obtuve una clase de archivo representada en el directorio actual.
Suponga que estoy en el directorio E: \ dir \, y este directorio tiene un archivo llamado Test.java. Su contenido es:
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());
}
}
}
Abra la herramienta cmd y navegue al directorio e: \ dir, ejecute el siguiente comando en él:
E:\dir> javac Test.java
E:\dir> java Test
Tengo:
e:\Test.class false
e:\Test.java false
¿Es esto un error de Java JDK?
Información adicional de @JimGarrison:
Corrí este código
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());
}
}
en Eclipse (que vive en mi unidad D:) y obtuve el siguiente resultado:
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
Lo que confirma que está pasando algo gracioso.
JavaBug 8130462 parece estar relacionado, ya que tiene que ver con rutas relativas vs absolutas específicamente en Windows.